在我的应用聊天功能中,我使用UITableView
来显示聊天记录。
单元格是UITableViewCell
的子类。该类接收一个Chat对象,该对象包含构建单元所需的所有信息。
我有一个Firebase侦听器,在“最后一条消息”发生更改时触发。它将UILabel文本更改为“新消息!”然后协议/委托重新加载表视图。现在我需要将标签更改回“”。
当用户点击单元格时,我在准备segue后使用didSelectRowAt来转换到JSQMessagesViewController。我的想法是使用prepare for segue甚至didSelectRowAt本身来更改UITableViewCell中与该聊天对象相对应的布尔变量。导航回tableViewController将触发reloadData。
每个ChatObject都有一个我可以访问的唯一ID。在触发侦听器之后,我将此布尔值设置为一个值。单击单元格后,我将其设置为另一个单元格。变量的状态将告诉IBOutlet要显示的文本。在UITableViewCell类中,我使用:
var chat: Chat! {
didSet {
self.updateUI()
}
}
}
所以在self.updateUI()
我做了必要的更改,但是我可以在UITableViewCell
的{{1}}可变/可见中创建属性吗?
答案 0 :(得分:1)
如何在UITableViewCell中创建可从UITableViewController中变化的属性
你没有。您在模型中进行更改,并告诉表视图重新加载其数据。
答案 1 :(得分:0)
所以在self.updateUI()中我做了必要的更改,但是我可以从UITableViewController中使UITableViewCell中的属性变为可变吗?
我认为你不想做你说你做的事。如果您尝试访问自定义UITableViewCell
子类的属性,则可能需要使用cellForRowAtIndexPath()
。然后将结果转换为您的UITableViewCell
子类的任何类名。
示例强>:
如果我想更改表格视图dataSource
之外的第5行,我可以这样做。
let fifthIndexPath = IndexPath(row: 5, section: 0)
let thisCell = myTableView.cellForRowAtIndexPath(at indexPath: fifthIndexPath) as! MyCustomTableViewCell
thisCell.property = value
请参阅: https://developer.apple.com/documentation/uikit/uitableviewdatasource/1614861-tableview