【问题标题】:MessageKit Not Showing Message Input Bar Swift 5MessageKit 不显示消息输入栏 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")
    }

}

但没有显示。我也查了意见,没找到

【问题讨论】:

    标签: ios swift messagekit


    【解决方案1】:

    要解决这个问题,我必须:

    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 = ""
    
        }
    }
    
    
    

    【讨论】:

      【解决方案2】:

      显示输入栏的解决方案:

      class ViewController: MessagesViewController {
      
          override func viewDidAppear(_ animated: Bool) {
              super.viewDidAppear(animated)
      
              self.becomeFirstResponder()
          }
      }
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-12
        • 1970-01-01
        • 2019-10-05
        • 1970-01-01
        • 1970-01-01
        • 2016-08-09
        • 1970-01-01
        相关资源
        最近更新 更多