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

Posted

技术标签:

【中文标题】在 tableView(:didSelectRowAt) 中为自定义表格单元格 UILabel 设置值【英文标题】:Setting values for custom table cell UILabels in tableView(:didSelectRowAt) 【发布时间】:2020-03-07 21:40:30 【问题描述】:

我有一个用于 UIViewController 基类的方法,该基类使用具有动态原型和 1 个原型单元格和右侧细节单元格样式的表视图:

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 中使用时,在第一个视图控制器中的上述方法中起作用的行:

如果让 cell = tableView.cellForRow(at: indexPath)

似乎不允许我使用类似的东西:

cell.foreignWord.text = split[1]

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

我得到错误:

UITabelViewCell 没有成员“foreignWord”。

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

【问题讨论】:

【参考方案1】:

cellForRow(at 返回基类UITableViewCell(错误清楚地告诉您),使用自定义单元格,您必须有条件地向下转换类型

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

【讨论】:

以上是关于在 tableView(:didSelectRowAt) 中为自定义表格单元格 UILabel 设置值的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 didSelectRow tableView 方法显示视图控制器

Swift iOS - 如何将直接从 TableViewCell 的子类中获取的值传递给 TableView 的 didSelectRow?

DidSelectRow 不工作

在 moveRowAt [关闭] 之后找到 didSelectRow 的正确行

UITableView控件didSelectRow和didDeselectRow方法注意事项

我们可以在 ios swift 的 indexpath 的 didSelectRow 中异步调用 api