使用"发送自定义"按钮在UITableview中的新行中插入数据



我正在使用firebasechat制作一个聊天应用程序。我正在使用一个按钮,并尝试使用textfieldbutton来发送消息。我能做到。但是,我想键入并发送消息,以便在聊天中显示在我的tableview中。当用户键入消息时,它将在firebase中生成并创建。只有当我按下send并重新运行应用程序时,这才会显示在tableview中。我甚至更新了我的数据源,这样我就不会再出现说numbers of rows isn't equal to items inserted的崩溃了。当我把消息附加到userMessages时,它崩溃了,给了我这个。

无效更新:节0中的行数无效。更新(2(后现有节中包含的行数必须等于更新(0(前该节中包含行数

var objects: [String] = []
var userMessages = [Any]()
var userChat:UserChat? = nil
override func viewDidLoad() {
super.viewDidLoad()
self.objects = self.userChat!.iDs
}
@IBAction func sendButton(_ pSender: UIButton) {
generateMessages()
}
private func generateMessages() {
let userReference = UserReference(userID: AppDelegate.shared.user!.userID, fullName: AppDelegate.shared.user!.userName, status: .user)
guard let stringText = textField.text else { return }
let message = AppDelegate.shared.userMessages[stringText]
self.conversationMessages.insert(AppDelegate.shared.addMessage(stringText, to: self.conversation!, sender:userReference, type: .text, date: message?.date), at: 0)
let indexPath = IndexPath(row: 0, section: 0)
self.tableView.insertRows(at: [indexPath], with: .top)
self.tableView.scrollToRow(at: indexPath, at: .top, animated: true)
self.tableView.reloadData()
}
func tableView(_ pTableView: UITableView, numberOfRowsInSection pSection: Int) -> Int {
return self.userMessages.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let row = self.objectAtIndexPath(indexPath)
let theCell = tableView.dequeueReusableCell(withIdentifier: reUseIdentifier, for: indexPath)
return theCell
}
func objectAtIndexPath(_ indexPath: IndexPath) -> String {
return self.objects[indexPath.row]
}

您的代码非常混乱。您有三个数组。

  • numberOfRowsInSection中,返回userMessages的编号
  • cellForRowAt中使用objects
  • conversationMessages中插入新消息

这实际上是错误的原因。使用一个阵列作为数据源

不要使用多个数组,而是使用单个数组,例如numberOfRowsInSection中的self.userMessages。

使用此方法更新self.userMessages

func textField(_textField:UITextField,shouldChangeCharactersIn range:NSRange,replacementString string:string(->Bool{

let value = (textField.text as NSString?)?.replacingCharacters(in: range, with: string) ?? string

self.userMessages.append(value(

返回真实

}现在在func textFieldShouldEndEditing(_textField:UITextField(->Bool中重新加载表视图{返回true}

最新更新