欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

【iOS开发】UITableView中dequeueReusableCell带indexpath方法和不带的区别

程序员文章站 2022-03-08 23:49:34
官方的描述: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(wit...

官方的描述:

	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,系统会自动初始化。

使用实例:

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;
    }
    
}

本文地址:https://blog.csdn.net/wm9028/article/details/114316099