標籤:
Swift和OC中UITableView的使用基本是差不多,只是有一些文法上的差異。下面我們一步一步從0開始寫一個tableView。一、建立tableView
import UIKitlet ID = "Cell" //cell的ID,建議像這樣寫一個常量,不要直接使用"Cell"class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { //0.遵守協議 override func viewDidLoad() { super.viewDidLoad() //1.建立UITableView(跟OC幾乎一樣) var tableView = UITableView(frame: view.bounds, style: UITableViewStyle.Plain) //2.註冊Cell tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: ID) //下面這種寫法也是可以的 //tableView.registerClass(UITableViewCell.classForCoder(), forCellReuseIdentifier: ID) //3.設定資料來源和代理 tableView.dataSource = self tableView.delegate = self; //4.添加到view中 self.view.addSubview(tableView) }}
注意:1.協議的寫法,不需要寫<>。2.上面的代碼中第0步和第3步會報錯,不要驚慌,暫時無視,並不是代碼有問題,是因為我們沒有實現相應的協議方法。
二、準備假資料
// 懶載入 lazy var datas: [Int] = { // 建立一個存放int的數組 var nums = [Int]() // 添加資料 for i in 0...50 { nums.append(i) } // 返回 return nums }()
這裡採用懶載入,Swift的懶載入和OC差別還是比較大的,需要注意一下。
三、實現協議方法
// MARK: - UITableViewDataSource & UITableViewDelegate func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { //返回有多少行Cell, 這裡返回數組的count return datas.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // 獲得cell let cell = tableView.dequeueReusableCellWithIdentifier(ID, forIndexPath: indexPath) as! UITableViewCell // 配置cell cell.textLabel!.text = "假資料 - \(datas[indexPath.row])" // 返回cell return cell }
解釋幾個可能有點迷糊的地方:
1.as:這個東西比較符合人類思維,給蘋果點個贊。意思就是把什麼當作什麼,在上面的代碼中,由於方法dequeueReusableCellWithIdentifier的傳回值是
AnyObject(也就是OC中的id類型),所以需要通過as告訴編譯器這實際上是一個UITableViewCell。
2.!(驚嘆號):這玩意就是告訴編譯器我確定這裡的的cell.textLabel一定是非nil的, 可以放心的執行後面的。as後面的!也是一樣的道理。
至此,可以編譯運行看看效果了.
四、增加左滑刪除功能
實現一個方法即可
// 提交編輯操作 func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle,
forRowAtIndexPath indexPath: NSIndexPath) { // 如果是刪除操作 if editingStyle == .Delete { // 從數組中移除對應位置的資料 datas.removeAtIndex(indexPath.row) // 刪除表格中對應行的資料 tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade) } }
大功告成,運行看看效果吧。祝大家生活愉快!
Swift之UITableView的使用