美文网首页
【iOS开发】UITableView中dequeueReusab

【iOS开发】UITableView中dequeueReusab

作者: WMSmile | 来源:发表于2021-03-03 15:31 被阅读0次

官方的描述:

    open func dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell? // Used by the delegate to acquire an already allocated cell, in lieu of allocating a new one.

    @available(iOS 6.0, *)
    open func dequeueReusableCell(withIdentifier identifier: String, for indexPath: IndexPath) -> UITableViewCell // newer dequeue method guarantees a cell is returned and resized properly, assuming identifier is registered

iOS6.0之后新增的func dequeueReusableCell(withIdentifier identifier: String, for indexPath: IndexPath) -> UITableViewCell

两种重用机制的区别

1、方法open func dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell?
cell最初从cell队列中获取,可能为空,需要判断是否空处理。

使用实例:

import UIKit
class ListTableViewController: UIViewController ,UITableViewDelegate, UITableViewDataSource{
    
    private let identifer = "ListTableViewControlleritemcell"
    private var listTableView:UITableView? = nil
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        createTableView();
    }
    
    //MARK:- 创建tableview
    func createTableView() -> Void {
        listTableView = UITableView.init();
        listTableView?.delegate = self;
        listTableView?.dataSource = self;
        self.view.addSubview(listTableView!); 
    }
    //MARK:- tableview dataSourceDelegate
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10;
    }
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1;
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //获取重用cell 有可能获取不到为nil
        var cell = tableView.dequeueReusableCell(withIdentifier: identifer);
        //判断为nil 初始化一个新的cell
        if(cell == nil)
        {
            cell = UITableViewCell.init(style: .default, reuseIdentifier: identifer);
        }
        cell?.textLabel?.text = "描述";
        return cell!;
    }

}

2、方法open func dequeueReusableCell(withIdentifier identifier: String, for indexPath: IndexPath) -> UITableViewCell 在初始UITableView的时候,注册cell,系统会自动初始化。

如果未使用register方法就会报错

使用实例:

import UIKit

class ListTableViewController: UIViewController ,UITableViewDelegate, UITableViewDataSource{
    
    private let identifer = "ListTableViewControlleritemcell"
    private var listTableView:UITableView? = nil
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        createTableView();
    }
    
    //MARK:- 创建tableview
    func createTableView() -> Void {
        listTableView = UITableView.init();
        listTableView?.delegate = self;
        listTableView?.dataSource = self;
        self.view.addSubview(listTableView!);
        
        //1、注册cell
        listTableView?.register(UITableViewCell.self, forCellReuseIdentifier: identifer)
        
                
    }
    //MARK:- tableview dataSourceDelegate
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10;
    }
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1;
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //2、获取重用的cell
        let cell = tableView.dequeueReusableCell(withIdentifier: identifer,for: indexPath);
        cell.textLabel?.text = "描述"
        return cell;
    }
    
}

相关文章

网友评论

      本文标题:【iOS开发】UITableView中dequeueReusab

      本文链接:https://www.haomeiwen.com/subject/jvwqqltx.html