MessageKit 不显示消息输入栏 Swift 5
Posted
技术标签:
【中文标题】MessageKit 不显示消息输入栏 Swift 5【英文标题】:MessageKit Not Showing Message Input Bar Swift 5 【发布时间】:2019-09-20 20:45:45 【问题描述】:所以这是控制器层次结构 tabBarController -> 一些控制器和聊天频道控制器。
这个聊天频道控制器也是一个导航控制器。当我选择行时,它会推送到 MessageViewController 类的聊天控制器。
我这里有 2 个问题,一个小一个大。
次要的是那个头像。
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")
但没有显示。我也查了意见,没找到
【问题讨论】:
【参考方案1】:要解决这个问题,我必须:
import InputBarAccessoryView
所以你不必这样做:
messageInputBar.delegate = self as InputBarAccessoryViewDelegate
并在您的 viewDidLoad() 中设置这些代表(颜色可选)
super.viewDidLoad()
guard let userId = Auth.auth().currentUser?.uid elsereturn
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 elsereturn
guard let uid = Auth.auth().currentUser?.uid elsereturn
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 elsereturn
userMessageRef.updateChildValues([messageId: 1])
let recipientMessageRef = Database.database().reference().child("user-messages").child(recipient.uid).child(uid)
recipientMessageRef.updateChildValues([messageId:1])
inputBar.inputTextView.text = ""
【讨论】:
【参考方案2】:显示输入栏的解决方案:
class ViewController: MessagesViewController
override func viewDidAppear(_ animated: Bool)
super.viewDidAppear(animated)
self.becomeFirstResponder()
来源:https://github.com/MessageKit/MessageKit/issues/501#issuecomment-361913168
【讨论】:
以上是关于MessageKit 不显示消息输入栏 Swift 5的主要内容,如果未能解决你的问题,请参考以下文章
MessageKit - 当我点击 inputBar 时,键盘不显示
MessageKit:将手势识别器添加到 messageCollectionView 和 cellDelegate 不起作用