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`swift的左对齐

在MessageKit中轻按以放大图像视图-Swift

MessageKit - 当我点击 inputBar 时,键盘不显示

MessageKit:将手势识别器添加到 messageCollectionView 和 cellDelegate 不起作用

使用 MessageKit 构建的聊天视图永远不会滚动到带有图片的最后一条消息

在 MessageKit 中 configureAvatarView 无法正常工作