Слушатель не запускается, когда пользователь нажимает кнопку отправки с использованием библиотеки 'MessageKit' - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь реализовать простое приложение для обмена сообщениями, но методы MessageInputBarDelegate не запускаются. Другие расширения, такие как MessagesDisplayDelegate, запускаются, как и ожидалось.

Я пользуюсь Swift 4.4.2

файл pod:

use_frameworks!

target 'm-v0.01' do
    pod 'Socket.IO-Client-Swift', '~> 15.1.0'
    pod 'Alamofire', '~> 5.0.0-beta.5'
    pod 'MessageKit'
#    pod 'MessageInputBar'
#    pod 'MessageInputBar', :git => 'https://github.com/MessageKit/MessageInputBar.git', :branch => 'master'
end 

У меня есть два контроллера, один для входа в систему и один для отображения сообщений:

ViewController: (для входа в систему)

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var loginValue: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?)
    {
        if segue.destination is MViewController
        {
            let vc = segue.destination as? MViewController
            vc?.text = loginValue.text!
        }
    }

    @IBAction func loginAction(_ sender: UIButton!) {

        print("Entered Text" , loginValue.text)



        performSegue(withIdentifier: "view2", sender: self)

    }

}

MViewController (для отображения сообщений):

import UIKit
import SocketIO
import Alamofire
import MessageKit

extension MViewController: MessagesLayoutDelegate {
    func heightForLocation(message: MessageType,
                           at indexPath: IndexPath,
                           with maxWidth: CGFloat,
                           in messagesCollectionView: MessagesCollectionView) -> CGFloat {

        return 0
    }
}

extension MViewController: MessagesDisplayDelegate {
    func configureAvatarView(
        _ avatarView: AvatarView,
        for message: MessageType,
        at indexPath: IndexPath,
        in messagesCollectionView: MessagesCollectionView) {

        let message = messages[indexPath.section]
        let color = message.member.color
        avatarView.backgroundColor = color

        print("MessagesDisplayDelegate")
    }
}

extension MViewController: MessageCellDelegate {

    func didTapAvatar(in cell: MessageCollectionViewCell) {
        print("Avatar tapped")
    }

    func didTapMessage(in cell: MessageCollectionViewCell) {
        print("Message tapped")

    }

    func didTapCellTopLabel(in cell: MessageCollectionViewCell) {
        print("Top cell label tapped")
    }

    func didTapMessageTopLabel(in cell: MessageCollectionViewCell) {
        print("Top message label tapped")
    }

    func didTapMessageBottomLabel(in cell: MessageCollectionViewCell) {
        print("Bottom label tapped")
    }

    func didTapAccessoryView(in cell: MessageCollectionViewCell) {
        print("Accessory view tapped")
    }

}


extension MViewController: MessageInputBarDelegate {

    func messageInputBar(_ inputBar: MessageInputBar, didPressSendButtonWith text: String) {
        print("here")
    }

    func messageInputBar(_ inputBar: MessageInputBar, textViewTextDidChangeTo text: String) {
        print("changed")
    }

}

extension MViewController: MessagesDataSource {

    func currentSender() -> SenderType {
        return Sender(id: member.name, displayName: member.name)
    }

    func numberOfSections(
        in messagesCollectionView: MessagesCollectionView) -> Int {
        return messages.count
    }

    func messageForItem(
        at indexPath: IndexPath,
        in messagesCollectionView: MessagesCollectionView) -> MessageType {

        return messages[indexPath.section]
    }

    func messageTopLabelHeight(
        for message: MessageType,
        at indexPath: IndexPath,
        in messagesCollectionView: MessagesCollectionView) -> CGFloat {

        return 12
    }

    func messageTopLabelAttributedText(
        for message: MessageType,
        at indexPath: IndexPath) -> NSAttributedString? {

        return NSAttributedString(
            string: message.sender.displayName,
            attributes: [.font: UIFont.systemFont(ofSize: 12)])
    }
}

class MViewController: MessagesViewController{

    var text:String = ""

    var messages: [Message] = []
    var member: Member!

    override func viewDidLoad() {
        super.viewDidLoad()
        messagesCollectionView.messagesDataSource = self
        messagesCollectionView.messagesLayoutDelegate = self
        messagesCollectionView.messagesDisplayDelegate = self
        messagesCollectionView.messageCellDelegate = self
        messageInputBar.delegate = self
    }

}

Я просмотрел много учебников и документов, и это последовательно документировано как доступ к методам, которые запускаются, когда пользователь нажимает кнопку отправки или изменения текста:

func messageInputBar(_ inputBar: MessageInputBar, didPressSendButtonWith text: String) {
    print("here")
}

func messageInputBar(_ inputBar: MessageInputBar, textViewTextDidChangeTo text: String) {
    print("changed")
}

Я что-то пропустил в том, как я отправляю сообщения, что предотвращает срабатывание прослушивателя сообщений?

Есть библиотека pod 'MessageInputBar', стоит ли мне это тоже использовать? Похоже, мне это не нужно, так как код компилируется?

Обновление:

Я попытался установить делегата на messagesCollectionView:

 messagesCollectionView.delegate = self as MessageInputBarDelegate as? UICollectionViewDelegate

Но тот же результат: событие отправки не запускается.

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Мне нужно было использовать альтернативную версию MessageKit:

pod 'MessageKit' , '1.0.0'
0 голосов
/ 26 июня 2019

Из информации в комментариях я предполагаю, что у вас нет выхода на панель сообщений, и у вас нет делегата, настроенного на ваш viewController. Попробуйте установить его в viewDidLoad:

messageInputBar.delegate = self

И для этого ваш контроллер должен иметь подкласс MessagesViewController, поэтому в вашей ситуации он будет меняться

class ViewController: UIViewController {

до:

class ViewController: MessagesViewController {
...