MessageKit не показывает панель ввода сообщений Swift 5 - PullRequest
0 голосов
/ 20 сентября 2019

Итак, это вкладка иерархии контроллеров BarController -> некоторый контроллер и контроллер канала чата.

и этот контроллер канала чата также является контроллером навигации.Когда я выбираю строку, она выдвигается к контроллеру чата, который принадлежит к классу MessageViewController.

У меня есть 2 проблемы, здесь один второстепенный, один мажорный.

второстепенный, это то, что аватар.

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

Я установил его на ноль в одном из делегатов, но он все еще показывает. И также он никогда не печатает оператор.

Главный из них заключается в том, что строка ввода вообще не отображается.У меня уже есть InputBarAccessoryView в моем файле pod и

messageInputBar.delegate = self as InputBarAccessoryViewDelegate

extension ChatViewController: InputBarAccessoryViewDelegate {

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

}

, но ничего не показывает.Я также проверил виды и не смог его найти chat view view hierachy

1 Ответ

0 голосов
/ 23 сентября 2019

, чтобы решить эту проблему, я должен был:

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

    }
}


...