【问题标题】:swift tableview reload data issue - missing elements in custom cellswift tableview重新加载数据问题 - 自定义单元格中缺少元素
【发布时间】:2014-12-16 05:35:49
【问题描述】:

我是 iOS 编程新手,我使用的语言是 Xcode 6.0.1 中的 Swift。我目前正在我的应用程序中实现聊天功能。我已经使用网络套接字从服务器发送/接收消息,它工作正常。我遇到的问题是显示发送/接收的消息。

我创建了一个带有表格视图、文本字段和按钮的 UIViewController 来发送消息。我已经应用了所有必要的约束来适应自动布局,并实现了所需的委托。每次用户发送/接收消息时,都会在数据源(字符串数组)中添加一个新的消息字符串,然后我调用:

self.tableView.reloadData

表格由自定义单元格组成,在视图中带有图像和标签。一些发送/接收工作正常,但一段时间后,表格视图混乱,只保留自定义单元格内的图像,如图所示

这是我的 cellForRowAtIndexPath 代码:

func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

{
    var cell: customMessageCell = self.tableView.dequeueReusableCellWithIdentifier(cellIdentifier ,forIndexPath: indexPath) as customMessageCell

    if(messages[indexPath.row].contains("Fiona")){
        cell.myAvatar.hidden = true
        cell.myMessage.hidden = true
        cell.myMessageBubble.hidden = true

        cell.yourMessage.text = messages[indexPath.row]
        cell.yourAvatar.hidden = false
    }else{
        cell.yourAvatar.hidden = true
        cell.yourMessage.hidden = true
        cell.yourMessageBubble.hidden = true

        cell.myMessage.text = messages[indexPath.row]
        cell.myAvatar.hidden = false
    }

    cell.selectionStyle = UITableViewCellSelectionStyle.None
    return cell
}

我检查了消息数组实际上是递增的,但是当我在表视图中重新加载数据时,问题就出现了。我该如何解决?这是在表中插入新单元格而不是(添加到数据源+表重新加载)的更好方法吗?谢谢!

【问题讨论】:

  • 请出示您的代码 - 特别是cellForRowAtIndexPath
  • 这里的问题是,当您滚动时,值会在每个滚动条上隐藏或显示

标签: ios iphone uitableview swift xcode6


【解决方案1】:

重用单元格时,您需要适当地完全重置属性。您的代码隐藏了消息和气泡,但不会取消隐藏它们,因此以前用于“传出”消息的单元格可能会被重新用于“传入”消息,并且消息/气泡将被隐藏。

func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

{
    var cell: customMessageCell = self.tableView.dequeueReusableCellWithIdentifier(cellIdentifier ,forIndexPath: indexPath) as customMessageCell

    if(messages[indexPath.row].contains("Fiona")){
        cell.myAvatar.hidden = true
        cell.myMessage.hidden = true
        cell.myMessageBubble.hidden = true

        cell.yourMessage.text = messages[indexPath.row]
        cell.yourAvatar.hidden = false
        cell.yourMessageBubble.hidden = false
        cell.yourMessage.hidden = false;
    }else{
        cell.yourAvatar.hidden = true
        cell.yourMessage.hidden = true
        cell.yourMessageBubble.hidden = true

        cell.myMessage.text = messages[indexPath.row]
        cell.myAvatar.hidden = false
        cell.myMessageBubble.hidden = false
        cell.myMessage.hidden = false
    }

    cell.selectionStyle = UITableViewCellSelectionStyle.None
    return cell
}

【讨论】:

  • 谢谢!我怎么能忽略这么简单的事情。 >_
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多