Joe*_*sta 0 iphone uitableview ios swift xcode6
我是iOS编程的新手,我使用的语言是Xcode 6.0.1中的Swift。我目前正在我的应用程序中实现聊天功能。我已经使用Web套接字从服务器发送/接收消息,并且工作正常。我遇到的问题是显示已发送/已接收的消息。
我创建了一个UIViewController,它具有一个表格视图,一个文本字段和用于发送消息的按钮。我已经应用了所有必要的约束以适应自动布局,并实现了所需的委托。每次用户发送/接收消息时,都会向数据源(字符串数组)中添加一个新的消息字符串,然后调用:
self.tableView.reloadData
Run Code Online (Sandbox Code Playgroud)
该表由自定义单元格组成,视图中带有图像和标签。几次发送/接收工作正常,但是一段时间后,表格视图混乱,仅保留自定义单元格内的图像,如该图像所示
这是我的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
}
Run Code Online (Sandbox Code Playgroud)
我已经检查了消息数组实际上是否在增加,但是当我在表视图中重新加载数据时,就会出现问题。我该如何解决?这是在表中插入新单元格而不是(添加到数据源+重新加载表)更好的方法吗?谢谢!
当单元被重用时,您需要适当地完全重置属性。您的代码会隐藏消息和气泡,但不会取消隐藏它们,因此以前用于“传出”消息的单元格可能会被重新用于“传入”消息,并且消息/气泡将被隐藏。
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
}
Run Code Online (Sandbox Code Playgroud)