美文网首页
【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