我有一个在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。
cellForRow(at
返回基类UITableViewCell
(错误清楚地告诉您),对于自定义单元格,您必须有条件地向下转换类型]if let cell = tableView.cellForRow(at: indexPath) as? MyCustomCell { ...