UITableView的仅示出了1个细胞时,它应该显示2个细胞(SWIFT 3)

UITableView的仅示出了1个细胞时,它应该显示2个细胞(SWIFT 3)

问题描述:

所以,我有3个小区:SenderCellReceiverCell和默认的空白CellUITableView的仅示出了1个细胞时,它应该显示2个细胞(SWIFT 3)

我想要的mainTableView显示来自发送者和接收者的所有消息,分别载于messageFromCurrentUserArraymessageFromReceiverArray。不幸的是,每当我运行下面的代码时,它只显示任一单元格。我想显示两个单元格,如果他们的数组不是空的。希望有人能帮助我。提前致谢!

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子句和索引访问喜欢的东西

的总和3210
} 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 { 
    // ... 
} 
+0

它的工作!非常感谢! – acoustickat