使用Struct从TableViewController更改tableViewCell

时间:2017-08-30 21:18:21

标签: ios swift

在我的应用聊天功能中,我使用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}}可变/可见中创建属性吗?

2 个答案:

答案 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