【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