UITableView的仅示出了1个细胞时,它应该显示2个细胞(SWIFT 3)
问题描述:
所以,我有3个小区:SenderCell
,ReceiverCell
和默认的空白Cell
UITableView的仅示出了1个细胞时,它应该显示2个细胞(SWIFT 3)
我想要的mainTableView显示来自发送者和接收者的所有消息,分别载于messageFromCurrentUserArray
和messageFromReceiverArray
。不幸的是,每当我运行下面的代码时,它只显示任一单元格。我想显示两个单元格,如果他们的数组不是空的。希望有人能帮助我。提前致谢!
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return allMessages.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row < messageFromCurrentUserArray.count {
let cell = mainTableView.dequeueReusableCell(withIdentifier: "SenderCell", for: indexPath) as! SenderTableViewCell
cell.senderMessage.text = messageFromCurrentUserArray[indexPath.row]
mainTableView.beginUpdates()
cell.senderMessage.sizeToFit()
let imageFile = PFUser.current()?["profilePhoto"] as! PFFile
imageFile.getDataInBackground(block: { (data, error) in
if let imageData = data {
self.currentUserImage = UIImage(data: imageData)!
}
})
cell.senderProfilePhoto.image = currentUserImage
cell.senderProfilePhoto.layer.masksToBounds = false
cell.senderProfilePhoto.layer.cornerRadius = cell.senderProfilePhoto.frame.height/2
cell.senderProfilePhoto.clipsToBounds = true
mainTableView.endUpdates()
return cell
} else if indexPath.row < messageFromReceiverArray.count {
let cell = mainTableView.dequeueReusableCell(withIdentifier: "ReceiverCell", for: indexPath) as! ReceiverTableViewCell
cell.receiverMessage.text = messageFromReceiverArray[indexPath.row]
mainTableView.beginUpdates()
cell.receiverMessage.sizeToFit()
cell.receiverProfilePhoto.image = receiverImage
cell.receiverProfilePhoto.layer.masksToBounds = false
cell.receiverProfilePhoto.layer.cornerRadius = cell.receiverProfilePhoto.frame.height/2
cell.receiverProfilePhoto.clipsToBounds = true
mainTableView.endUpdates()
return cell
} else {
let cell = mainTableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CellTableViewCell
return cell
}
}
答
的问题是,如果语句外之比较:
if indexPath.row < messageFromCurrentUserArray.count {
//...
} else if indexPath.row < messageFromReceiverArray.count {
// ...
} else {
// ...
}
由于所有的count
S IN的阵列开始与指数0
,并在他们的每一个计数停止,但你的indexPath.row会上去的两者(例如messageFromCurrentUserArray.count + messageFromReceiverArray.count
)
你必须改变第二if
子句和索引访问喜欢的东西
} else if indexPath.row < (messageFromCurrentUserArray.count + messageFromReceiverArray.count) {
// ...
int receiverIndex = indexPath.row - messageFromCurrentUserArray.count
cell.receiverMessage.text = messageFromReceiverArray[receiverIndex]
// or: cell.receiverMessage.text = allMessages[indexPath.row]
// ...
} else {
// ...
}
它的工作!非常感谢! – acoustickat