MessageKit 不显示消息输入栏 Swift 5

Day*_*n D 4 ios swift messagekit

所以这是控制器层次结构 tabBarController -> 一些控制器和聊天频道控制器。

而这个聊天频道控制器也是一个导航控制器。当我选择行时,它会推送到 MessageViewController 类的聊天控制器。

我在这里有两个问题,一个是次要的,一个是主要的。

次要的是那个分身。

    func avatarSize(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> CGSize {
        print("delegate method called")
        return .zero
}
Run Code Online (Sandbox Code Playgroud)

我在其中一个代表中将其设置为零,但它仍然显示。而且它从不打印语句。

主要的一个是输入栏根本没有显示。我的 pod 文件中已经有 InputBarAccessoryView 并且

messageInputBar.delegate = self as InputBarAccessoryViewDelegate

extension ChatViewController: InputBarAccessoryViewDelegate {

    func inputBar(_ inputBar: InputBarAccessoryView, didPressSendButtonWith text: String) {
        print("text")
    }

}
Run Code Online (Sandbox Code Playgroud)

但没有显示。我也检查了视图,我找不到它 聊天视图 查看层次结构

Di *_*erd 5

为了解决这个问题,我不得不:

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()
    }
Run Code Online (Sandbox Code Playgroud)

那么如果使用实时数据库 - 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 = ""

    }
}


Run Code Online (Sandbox Code Playgroud)


小智 5

显示输入栏的解决方案:

class ViewController: MessagesViewController {

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        self.becomeFirstResponder()
    }
}
Run Code Online (Sandbox Code Playgroud)

来源:https ://github.com/MessageKit/MessageKit/issues/501#issuecomment-361913168