Swift重新加载单元格而不重新加载整个tableView

时间:2018-04-17 20:29:27

标签: swift tableview

我用类似功能制作了一个聊天应用程序。

这是一个每10秒获取一次新消息数据的应用程序。

我想更新消息。我知道只需覆盖屏幕外单元格的 dataSource 即可。

    let visibleRowsIndexPaths = tableView.indexPathsForVisibleRows!

    for indexPath in visibleRowsIndexPaths {

        // Loading the new data (updated message, likes count)
        let message = MessagesStore.shared.messages[indexPath.row]

        if let cell = self.tableView.cellForRow(at: indexPath) as? MessageCell {
            cell.messageLabel.text = message.message
            cell.likesButton.setTitle("\(message.likes!) likes", for: .normal)

        } else if let cell = self.tableView.cellForRow(at: indexPath) as? OwnMessageCell {
            cell.messageLabel.text = message.message
            cell.likesButton.setTitle("\(message.likes!) likes", for: .normal)
        }
    }

但屏幕上的细胞呢?

...

使用我编写的代码是否有效?

tableView.reloadData()

我也可以使用// Get a list of all the buttons in the group let buttons = Array.from(document.querySelectorAll('[type=button]')) // For each button add a click event listener // This allows us to remove the 'onclick' from the html buttons.forEach(item => { item.addEventListener('click', e => { // When the button is clicked, remove the active state // Then add the inactive state buttons.forEach(button => { // If the current button does not equal the clicked button // Remove the active state class button != e.currentTarget && button.classList.remove("actief") button.classList.add("nietactief") }) // Toggle the state of the clicked button item.classList.toggle("actief") }) }),但它会导致一些错误,比如某些时候选择消失,tableView跳转,它不顺畅..

我的代码工作得很好而且流畅,但效率很高吗?

2 个答案:

答案 0 :(得分:1)

您在两个代码块中都是这样做的。在最糟糕的情况下,你要求你的tableView两次为一个单元格 - 只是因为类不匹配(但你的需求是相同的)。

接口(ObjC中的协议)允许您定义方法签名(以及Swift中的属性?)。这就是我在ObjC中所做的:定义一个协议(其他语言的接口),只需要这个tableView的任何单元来实现它。

此尝试还可以进一步添加其他细胞,这些细胞提供几乎相同的功能。

答案 1 :(得分:0)

您可以使用self.tableView.reloadData()重新加载整个表格,或self.tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: UITableViewRowAnimation.None)重新加载特定单元格。

您可以阅读有关UITableView类here

的更多信息