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

68 篇文章 1 订阅

官方的描述:

	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;
    }
    
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WMSmile

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值