在tableView(:didSelectRowAt)中为自定义表格单元格UILabel设置值

问题描述 投票:0回答:1

我有一个在UIViewController基类中使用的方法,该基类使用具有动态原型和1个原型单元以及正确的细节单元样式的Table View:

func tableView(_ homeworkTable: UITableView, didSelectRowAt indexPath: IndexPath) {
     homeworkTable.deselectRow(at: indexPath, animated: true)
     if let cell = homeworkTable.cellForRow(at: indexPath) {
        if cell.detailTextLabel?.text == "" {
           let homeworkWord = homeworkWords[indexPath.row]
           if homeworkWord.isEmpty == false {
              let split = homeworkWord.components(separatedBy: "::")
              cell.detailTextLabel?.text = split[1]
           }
        } else {
          cell.detailTextLabel?.text = ""
        }
     }

     let now: TimeInterval = Date().timeIntervalSince1970
     if (now - lastClick < 0.3) && (lastIndexPath?.row == indexPath.row ) {
        self.scrollToTop()
     }
     lastClick = now
     lastIndexPath = indexPath as NSIndexPath
}

我还有另一个UIViewController,它在XIB文件中使用自定义表格单元格。它有一个按钮和2个UILabel。我已经为按钮完成了所有工作,并且UILabel占据了单元格的第一个左侧。但是,在具有自定义单元格的视图控制器中的didSelectRowAt中使用时,在第一个视图控制器中上述方法中有效的行:

如果让单元格= tableView.cellForRow(at:indexPath)

似乎没有让我使用类似的东西:

cell.foreignWord.text = split [1]

对于自定义单元格,其中foreignWord是自定义单元格中的第二个UILabel。

我收到错误:

UITabelViewCell没有成员'foreignWord'。

我已将笔尖注册到tableView,并进行所有常规设置。我知道两个viewControllers之间的区别是,一个使用单元格原型,另一个使用自定义xib单元格,所以我在想,在不传递单元格参数的方法中实例化单元格引用存在另一种方法,因此我可以将字符串文本值分配给UILabel。

swift tableview cell xib nib
1个回答
0
投票
[cellForRow(at返回基类UITableViewCell(错误清楚地告诉您),对于自定义单元格,您必须有条件地向下转换类型]

if let cell = tableView.cellForRow(at: indexPath) as? MyCustomCell { ...

© www.soinside.com 2019 - 2024. All rights reserved.