这是控制器层次结构 tabBarController -> 一些控制器和聊天频道控制器。
并且这个聊天频道控制器也是一个导航控制器。当我选择行时,它会推送到 MessageViewController 类的聊天控制器。
我这里有两个问题,一是小问题,一是大问题。
小一点就是头像。
func avatarSize(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> CGSize {
print("delegate method called")
return .zero
}
我在其中一位代表中将其设置为零,但它仍然显示。而且它也从不打印该语句。
主要的一个是输入栏根本不显示。
我的 pod 文件中已经有 InputBarAccessoryView
和
messageInputBar.delegate = self as InputBarAccessoryViewDelegate
extension ChatViewController: InputBarAccessoryViewDelegate {
func inputBar(_ inputBar: InputBarAccessoryView, didPressSendButtonWith text: String) {
print("text")
}
}
but nothing shows. I also checked the views and I couldn't find it
为了解决这个问题,我必须:
import InputBarAccessoryView
所以你不必这样做:
messageInputBar.delegate = self as InputBarAccessoryViewDelegate
并在您的 viewDidLoad() 中设置这些委托(颜色可选)
super.viewDidLoad()
guard let userId = Auth.auth().currentUser?.uid else{return}
Database.fetchUserWithUID(uid: userId) { (user) in
self.currentLogginUser = user
}
messageInputBar.delegate = self
maintainPositionOnKeyboardFrameChanged = true
messageInputBar.inputTextView.tintColor = .yellow
messageInputBar.sendButton.setTitleColor(.purple, for: .normal)
messagesCollectionView.messagesDataSource = self
messagesCollectionView.messagesLayoutDelegate = self
messagesCollectionView.messagesDisplayDelegate = self
messagesCollectionView.messageCellDelegate = self
messageInputBar.leftStackView.alignment = .center
messageInputBar.setLeftStackViewWidthConstant(to: 50, animated: false)
getMessages()
}
那么如果使用实时数据库 - Firebase
func inputBar(_ inputBar: InputBarAccessoryView, didPressSendButtonWith text: String) {
guard let recipient = self.recipient else{return}
guard let uid = Auth.auth().currentUser?.uid else{return}
let ref = Database.database().reference().child("messages")
let childRef = ref.childByAutoId()
let values = ["sender": uid, "text": text, "recipient": recipient.uid, "time": Date().timeIntervalSince1970.description]
childRef.updateChildValues(values) { (err, ref) in
if let err = err{
print(err)
return
}
let userMessageRef = Database.database().reference().child("user-messages").child(uid).child(recipient.uid)
//add chat id generated from AutoId
guard let messageId = childRef.key else{return}
userMessageRef.updateChildValues([messageId: 1])
let recipientMessageRef = Database.database().reference().child("user-messages").child(recipient.uid).child(uid)
recipientMessageRef.updateChildValues([messageId:1])
}
inputBar.inputTextView.text = ""
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)