TableViewDelegate

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

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

เมื่อเราเลือก item จะทำให้ cell นั้นมี state ค้างอยู่ในสถานะ selected เราจะต้องทำการ deselect ที่ cell นั้น

วิธีการคือ เราจะเพิ่มให้ 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 {
        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: "Buy milk"))
        todo.add(item: TodoItem(title: "Learning Swift"))
        todo.add(item: TodoItem(title: "Download XCode", isDone: true))
    }
}

Last updated