TableView中的Delegation


TableView簡說

TableView在iOS中是十分重要而且常見的一種View。如果ViewController是繼承自TableViewController,那麼就不需要遵守(conform) UITableViewDelegateUITableViewDataSource兩個protocol。這篇文章並不是在解說TableView是怎麼作的,是想了解一下TableView中的Delegation是怎麼達成(掛勾)的。

隱藏在故事板(Storyboard)中

Storyboard裡"隱藏"了不少好東西,每一個在Storyboard中的TableView物件都會有兩個Outlet(出口),用來連接它所必需要的delegatedataSource。如果你的ViewController是遵守(conform) UITableViewDelegateUITableViewDataSource這種的,沒連接好是表格是不會有資料進來的。(更棒的一件事是,Xcode也不會和你說你錯在哪裡~是吧)下面圖片說明是如何連接的。

TableView Delegate

事實上這件事(連接delegate)可以不用在Storyboard中來作,像之前的Delegation實際範例說明的一樣用法,掛勾(Hook)時機是在ViewController的viewDidLoad方法中,把self作為tableView的delegate與dataSource。當然要先建立TableView的Outlet,這個是一定免不了的。如果用之前所說的範例,用property observer的didSet也是可以的。

class ViewController: UIViewController , UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var tableView: UITableView!

    let dataSourceArray = ["First", "Second", "Three"]

    override func viewDidLoad() {
        super.viewDidLoad()

        //set the delegate   
        tableView.delegate = self
        tableView.dataSource = self
    }

    //skip other code
}

參考資料