본문 바로가기
ios 뽀개기/ios앱

15 ios 스위프트 아주 간단한 todo 어플 만들기

by 인생여희 2017. 11. 27.
반응형

15 ios 스위프트 아주 간단한 todo 어플 만들기


tableviewController

//

//  TableViewController.swift

//  Table

//

//  Created by MacBookPro on 2017. 11. 27..

//  Copyright © 2017년 MacBookPro. All rights reserved.

//


import UIKit


//앱시작시 기본적으로 나타낼 목록

var items = ["책구매","원일이약속","스터디준비하기"]

var itemsImageFile = ["cart.png","clock.png","pencil.png"]



class TableViewController: UITableViewController {

    


    

    //테이블뷰 아웃렛 변수

    @IBOutlet var tvListView: UITableView!

    

    override func viewDidLoad() {

        super.viewDidLoad()


        // Uncomment the following line to preserve selection between presentations

        // self.clearsSelectionOnViewWillAppear = false


        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.

        

        //바버튼으로 목록 삭제 동작 코딩하기

        self.navigationItem.leftBarButtonItem = self.editButtonItem

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }


    // MARK: - Table view data source


    override func numberOfSections(in tableView: UITableView) -> Int {

        // 보통은 테이블 안에 섹션이 한개이므로 1리턴

        return 1

    }


    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        // 색션당 열의 개수는 items의 개수이므로

        return items.count

    }


    

    

    //테이블 뷰 셀 아이디 적용

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath)

        

        //셀의 텍스트 레이블에 앞에서 선언한 items을 대입

        cell.textLabel?.text = items[(indexPath as NSIndexPath).row]

        //셀의 이미지 뷰에 앞에서 선언한 itemsImageFile을 대입한다.

        cell.imageView?.image = UIImage(named: itemsImageFile[(indexPath as NSIndexPath).row])

        return cell

    }

  


    /*

    // Override to support conditional editing of the table view.

    override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {

        // Return false if you do not want the specified item to be editable.

        return true

    }

    */


    

    // 삭제하는 함수

    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

        if editingStyle == .delete {

            

            //삭제하는 코드

            items.remove(at: (indexPath as NSIndexPath).row)

            itemsImageFile.remove(at: (indexPath as NSIndexPath).row)

            

            tableView.deleteRows(at: [indexPath], with: .fade)

        } else if editingStyle == .insert {

            // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view

        }    

    }

    


    //영문으로 사용된 delete를 한글로 바꾸기

    override func tableView(_ tableView: UITableView, titleForDeleteConfirmationButtonForRowAt indexPath: IndexPath) -> String? {

        return "삭제"

    }

    

    

    // 할일목록 재정렬하기

    override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) {

        //이동할 아이템과 이미지 위치를 저장한다.

        let itemToMove = items[(fromIndexPath as NSIndexPath).row]

        let itemImageToMove = itemsImageFile[(fromIndexPath as NSIndexPath).row]

        

        //이동할 아이템을 삭제한다. 이때 삭제된 아이템 뒤의 아이템들의 인덱스가 재정렬된다.

        items.remove(at: (fromIndexPath as NSIndexPath).row)

        itemsImageFile.remove(at: (fromIndexPath as NSIndexPath).row)

        

        //삭제된 아이템을 이동할 위치로 삽입한다.

        items.insert(itemToMove, at: (to as NSIndexPath).row)

        itemsImageFile.insert(itemImageToMove, at: (to as NSIndexPath).row)

    }

    

    

    //뷰가 전환될때 호출되는 함수 , 리스트가 추가되어 main view로 돌아올 때 호출 된다. 추가된 내용을 리스트에 보여준다.

   override func viewWillAppear(_ animated: Bool) {

        //추가된 내용을 목록으로 다시 불러온다.

        tvListView.reloadData()

    

    }

    //# 참고

    //뷰가 보일때 호출되는 함수

    // ViewDidLoad - 뷰가 로드 되었을 때 호출되는 함수, 뷰가 생성될때 한번만 호출 된다.

    // ViewWillAppear - 뷰가 노출될 준비가 끝났을 때 호출되는 함수, 뷰가 노출될때마다 호출

    // ViewDidAppear - 뷰가 완전히 보인 후 호출 되는 함수, 뷰가 완전히 보인후 호출

    

    


  

  

    // MARK: - Navigation

    //세그웨이 함수

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        //세그웨이 이름이 sgDetail 이면

        

        if segue.identifier == "sgDetail" {

            let cell = sender as! UITableViewCell

            let indexPath = self.tvListView.indexPath(for: cell)

            let detailView = segue.destination as! DetailViewController

            

            detailView.receiveItem(items[((indexPath as NSIndexPath?)?.row)!])

            

        }

    }

  


}


addcontroller

//

//  AddViewController.swift

//  Table

//

//  Created by MacBookPro on 2017. 11. 27..

//  Copyright © 2017년 MacBookPro. All rights reserved.

//


import UIKit


class AddViewController: UIViewController {

    

    //추가 텍스트 필드

    @IBOutlet weak var tfAddItem: UITextField!

    

    override func viewDidLoad() {

        super.viewDidLoad()


        // Do any additional setup after loading the view.

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    

    //추가하기 버튼

    @IBAction func btnAddIten(_ sender: UIButton) {

        

        items.append(tfAddItem.text!)

        itemsImageFile.append("clock.png")

        tfAddItem.text = ""

        

        _ = navigationController?.popViewController(animated: true)

    }

    

   


}


detailcontroller

//

//  DetailViewController.swift

//  Table

//

//  Created by MacBookPro on 2017. 11. 27..

//  Copyright © 2017년 MacBookPro. All rights reserved.

//


import UIKit


class DetailViewController: UIViewController {

    

    //메인뷰에서 받을 택스트 변수

    var receiveItem = ""

    

    @IBOutlet weak var lbItem: UILabel!

    

    override func viewDidLoad() {

        super.viewDidLoad()

        

        //뷰가 노출될때 마다 표시

        lbItem.text = receiveItem

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    

    //main view에서 변수를 받기위한 함수 추가

    func receiveItem(_ item:String) -> Void {

        receiveItem = item

    }

    


}

반응형

댓글