[아이폰] - 테이블뷰(TableView)
○ 테이블뷰(TableView) |
------------------------------------------ 테이블뷰 ------------------------------------------ 1. 원래 만들어진 ViewController.swift 를 지운다 2. 테이블 뷰 컨트롤러를 생성한다 subclass에 UITableViewController 하면 TableViewController 이름으로 생성된다 3. 테이블 뷰 컨트롤러(Main.storyboard)에서 만들고 Editor - Embed in - Navigation Controller 누른다 4. 만일 화살표 안붙어서 1빠 시작 안되면 네비게이션 컨트롤러 부분 누르고 오른쪽 4번째 화살표 아래로 간 모양에서 is initial view Controller 5. 다음 테이블 뷰 컨트롤러랑 연결 안되어있으면 오른쪽 마우스 - root view controller 로 연결한다 6. 테이블 뷰에서 상단에 버튼을 bar button item 으로 추가한다 7. 뷰 컨트롤러를 2개더 생성한다(Main.storyboard) 8. 아까 만든 bar button item 오른쪽 마우스 - show 로 첫번쨰 뷰 컨트롤러에 연결해준다 두번째는 prototype cell 에서 오른쪽 마우스서 viewController 에 show 로 연결해준다 9. 2개의 뷰 컨트롤러에 해당하는 swift 를 만들어 연동한다 10. 테이블뷰는 버튼 놓았던 자리에서 Title 로 뷰 이름 변경한다, 뷰컨트롤러는 동그라미 4번째 Title 로 변경한다 11. 테이블 뷰 cells 쪽에서 4번째 identifier 를 myCell 로 하고 아래쪽 동그라미 연결 부분을 sgDetail 로 세그연결한다 12. 테이블뷰에서 테이블뷰부분 tvListView 로 변수생성, 추가부분에서 텍스트필드 tfAddItem, 버튼액션 btnAddItem, 디테일부분에서 라벨 lblItem 변수선언 ------------------------------------------------------------------------------------------------- [ TableViewController.swift ] // 다른 컨트롤러에서도 사용할 수 있께 선언하는거임 여기 구간에 선언하는 것은(변수 추가) var items = ["책 구매", "철수와 약속", "스터디 준비하기"] var itemsImageFile = ["cart.png", "clock.png", "pencil.png"] class TableViewController: UITableViewController { @IBOutlet var tvListView: UITableView! override func viewDidLoad() { // Bar 버튼으로 목록 삭제하기 self.navigationItem.rightBarButtonItem = self.editButtonItem // 오른쪽상단 버튼추가 self.navigationItem.leftBarButtonItem = self.editButtonItem // 왼쪽쪽상단 버튼 추가 super.viewDidLoad() } override func numberOfSections(in tableView: UITableView) -> Int { return 1 }
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return items.count } // 테이블 목록 보여주기(myCell 만드는 것 - myCell 이라고 cell에 identifier 지정) override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) cell.textLabel?.text = items[(indexPath as NSIndexPath).row] cell.imageView?.image = UIImage(named: itemsImageFile[(indexPath as NSIndexPath).row]) return cell } // 얘는 없어서 추가해줘야함(새 목록 추가한거 리로드, 보여주기) override func viewWillAppear(_ animated: Bool) { tvListView.reloadData() } // editingStyle == .delete -> 목록 삭제하기 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 "삭제" } // 목록 순서 바꾸기 끌어다가 내려서(moveRow) 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) } // 목록의 세부내용 보기(identifier 시그에 sgDetail 지정) override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 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)!]) } } } [addViewController.swift] class addViewController: UIViewController { @IBOutlet weak var tfAddItem: UITextField! // 새 목록 추가하기 @IBAction func btnAddItem(_ sender: UIButton) { items.append(tfAddItem.text!) // 앞에서 static 변수 선언한거 가져옴 itemsImageFile.append("clock.png") tfAddItem.text = "" _ = navigationController?.popViewController(animated: true) } } [detailViewController.swift] // 목록의 세부내용 보기 class detailViewController: UIViewController { var receiveItem = "" @IBOutlet weak var lblItem: UILabel! override func viewDidLoad() { lblItem.text = receiveItem super.viewDidLoad() } func receiveItem(_ item: String){ receiveItem = item } } |
'아이폰' 카테고리의 다른 글
[아이폰] - 탭 바(Tab Bar) (0) | 2018.12.24 |
---|---|
[아이폰] - 뷰컨트롤러 데이터 이동(prepare) (0) | 2018.12.24 |
[아이폰] - 알림창 띄우기(AlertController) (0) | 2018.12.24 |
[아이폰] - 피커뷰(PickerView) 이미지 데이터 처리 (0) | 2018.12.24 |
[아이폰] - 피커뷰(PickerView) 데이터 처리 (0) | 2018.12.24 |