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(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(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的使用实战。

 

 

 

 

 

 

你可能感兴趣的:(Swift开发)