Swift4.x普通筆記03自定義Cell,拓展TableViewCell來簡化Cell呼叫的方式
阿新 • • 發佈:2019-01-09
首先我們在mvc的view資料夾裡面定義一個MyCell,
繼承UITableViewCell,
選擇的語言是Swift
然後就可以在控制器裡面是使用了,
以下是程式碼這裡我們的控制器:
class MineViewController: UITableViewController{ ..... override func viewDidLoad() { super.viewDidLoad() //這裡就是我們要註冊的自定義Cell tableView.register(UINib(nibName: String(describing:MyCell.self), bundle: nil), forCellReuseIdentifier: String(describing:MyCell.self)) } ..... }
註冊完之後我們就可以替換系統的方法了,程式碼如下
class MineViewController: UITableViewController{ ..... //返回cell的主要方法。 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { //這裡是我們主要的方法dequeueReusableCell,用來使用cell let cell = tableView.dequeueReusableCell(withIdentifier: String(describing:MyCell.self)) as! MyCell //這裡可以不要看,這裡是資料的獲取 let section = sections[indexPath.section] let myCellModel = section[indexPath.row] //這裡的leftLabel是我們在xib裡面的label,也是我們自定義的 cell.leftLabel.text = myCellModel.text //這裡的rightLabel是我們在xib裡面的label,也是我們自定義的 cell.rightLabel.text = myCellModel.grey_text //返回一個自定義cell return cell } ..... }
接下來介紹的是簡化cell呼叫,操作步驟如下
1,在我們的主要資料夾裡面新建一個UIView+Extension.swift
import UIKit protocol RegisterCellOrNib {} extension RegisterCellOrNib{ static var identifier:String{ return "\(self)" } static var nib:UINib?{ return UINib(nibName: "\(self)", bundle: nil) } }
2,在同級目錄下新建一個UITableView+Extension.swift ,這裡拓展的是UITableView
import UIKit
extension UITableView{
//這裡是註冊
func fp_registerCell<T:UITableViewCell>(cell:T.Type) where T:RegisterCellOrNib {
if let nib = T.nib {
register(nib, forCellReuseIdentifier: T.identifier)
}else{
register(cell, forCellReuseIdentifier: T.identifier)
}
}
//這裡是呼叫得到cell
func fp_dequeueReusableCell<T:UITableViewCell>(indexPath:IndexPath) -> T where T:RegisterCellOrNib {
return dequeueReusableCell(withIdentifier: T.identifier,for: indexPath)as! T
}
}
就兩步,不復雜。
接下來是替換。
class MineViewController: UITableViewController{
.....
override func viewDidLoad() {
super.viewDidLoad()
//這裡就是我們要註冊的自定義Cell
tableView.register(UINib(nibName: String(describing:MyCell.self), bundle: nil), forCellReuseIdentifier: String(describing:MyCell.self))
//以上的程式碼替換成下面的
tableView.fp_registerCell(cell: MyCell.self)
}
}
使用的時候也替換一下
class MineViewController: UITableViewController{
.....
//返回cell的主要方法。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//這裡是我們主要的方法dequeueReusableCell,用來使用cell
//let cell = tableView.dequeueReusableCell(withIdentifier: String(describing:MyCell.self)) as! MyCell
//以上的程式碼替換成下面的
let cell = tableView.fp_dequeueReusableCell(indexPath: indexPath) as MyCell
......
return cell
}
.....
}
這篇就結束了,總結一點,就是自定義cell的使用實戰。