🖥️
iOS App with Pop
Swift 4
Swift 4
  • iOS App development
  • Create New Project
  • Introduction to Xcode
  • App's life cycle
  • UIViewController
  • Storyboard
  • First Run
  • Display todo list
  • Basic Auto Layout
  • MVC
  • Model
  • Binding TableView
  • Binding TableViewCell
  • TableViewDelegate
  • Add navigationBar with + button
  • Add new item page
  • TextField and Switch
  • Binding action
  • Add mock item to todo list
  • Finish add item
  • Delete todo item
  • Edit todo item
  • Custom new layout
  • Adding new delegate
  • Refactor
  • Save data
  • Pushing edit view
  • Large navigation
  • Drag item
  • Drop item (in app)
  • Where to go from here?
Powered by GitBook
On this page

TableViewDelegate

PreviousBinding TableViewCellNextAdd navigationBar with + button

Last updated 6 years ago

อย่าดูเหมือนค้างสิ

ถ้าเราลองรันดูตอนนี้ เมื่อลองกดเลือกที่แต่ละรายการ จะเห็นว่ามีไฮไลท์เกิดขึ้นเป็นสีเทา ๆ แต่ไม่หายไป

วิธีการแก้คือ เราจะเพิ่มให้ ViewController เป็น Delegate ของ TableView และสั่งให้ TableView เลิก Select รายการนั้นหลังจาก Select เสร้จแล้ว เพื่อให้ไฮไลท์หายไป

ขั้นแรก เพิ่มที่หัว class ถัดจาก UITableViewDataSource

UITableViewDelegate

แล้วเพิ่ม tableView(_:didSelectRowAt)

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)
}

จากนั้นเหมือนเดิมคือ เชื่อม TableView กับ ViewController ว่า ViewController เป็น delegate

รันใหม่และลองเลือกอีกครั้ง

โค้ดสุดท้าย

ViewContrller.swift
import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    var todo = Todo()

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return todo.totalItems
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "todoItemCell", for: indexPath)
        let item = todo.item(at: indexPath.row)
        cell.textLabel?.text = item.title
        cell.accessoryType = item.isDone ? .checkmark : .none
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        todo.add(item: TodoItem(title: "Download XCode", isDone: true))
        todo.add(item: TodoItem(title: "Buy milk"))
        todo.add(item: TodoItem(title: "Learning Swift"))
    }
}

เชื่อม Delegate