如何在Swift中使用dequeueReusableCellWithIdentifier?
如果我取消注释
tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?)
我得到一个错误的线
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)
那是说UITableView? does not have a member named 'dequeueReusableCellWithIdentifier'
UITableView? does not have a member named 'dequeueReusableCellWithIdentifier'
如果我打开tableview然后错误消失,但在Objective-C中,我们通常会检查单元格是否存在,如果不存在,我们将创build一个新的单元格。 在Swift中,由于提供的样板使用了let
关键字并解开可选项,所以如果为零,我们不能重新指定它。
什么是在Swift中使用dequeueReusableCellWithIdentifier的正确方法?
您可以隐式地将参数解包到方法中,也可以将dequeueReusableCellWithIdentifier
的结果dequeueReusableCellWithIdentifier
转换为以下简洁的代码:
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("CellIdentifier", forIndexPath: indexPath) as UITableViewCell //configure your cell return cell }
如果单元格types尚未在表格视图中注册,则可以使用以下操作来获取单元格实例:
private let cellReuseIdentifier: String = "yourCellReuseIdentifier" // MARK: UITableViewDataSource func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cell:UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(cellReuseIdentifier) if (cell == nil) { cell = UITableViewCell(style:UITableViewCellStyle.Subtitle, reuseIdentifier:cellReuseIdentifier) } cell!.textLabel!.text = "Hello World" return cell! }
你需要解包tableViewvariables,因为它是可选的
if let realTableView = tableView { let cell = realTableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) // etc } else { // tableView was nil }
或者你可以缩短它
tableView?.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)
在回答“Objective-C中的问题”时,我们通常会检查单元格是否存在,如果不存在,我们创build一个新单元格, dequeueReusableCellWithIdentifier
总是返回一个单元格(只要你已经注册了一个类或这个标识符是一个笔尖),所以你不需要创build一个新的标识符。
swift 3版本:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath!) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier:"CellIdentifier", for: indexPath) as UITableViewCell return cell }
在Swift 3和Swift 4版本中,你只需要使用它
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "CellIdentifier", for: indexPath as IndexPath) as UITableViewCell cell.textLabel?.text = "cell number \(indexPath.row)." //cell code here return cell }
在Swift 2版本
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("CellIdentifier", forIndexPath: indexPath) as UITableViewCell cell.textLabel?.text = "cell number \(indexPath.row)." //cell code here return cell }