> For the complete documentation index, see [llms.txt](https://pakornpat.gitbook.io/ios-app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://pakornpat.gitbook.io/ios-app/tableviewdelegate.md).

# TableViewDelegate

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

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

![](/files/LnWbZNhyF8ATmVLt9u8C)

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

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

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

{% code title="" %}

```swift
UITableViewDelegate
```

{% endcode %}

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

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

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

![เชื่อม Delegate](/files/mxbJDvzPN3DKKV9FZIda)

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

![](/files/HHpHMHcdGsRic90fIW1N)

โค้ดสุดท้าย

{% code title="ViewContrller.swift" %}

```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))
    }
}
```

{% endcode %}
