1. 程式人生 > >Swift4.x普通筆記03自定義Cell,拓展TableViewCell來簡化Cell呼叫的方式

Swift4.x普通筆記03自定義Cell,拓展TableViewCell來簡化Cell呼叫的方式

首先我們在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的使用實戰。