使用“ MessageKit”库发送用户点击时,侦听器不触发

时间:2019-06-25 14:47:44

标签: ios xcode messagekit

我正在尝试实现一个简单的消息传递应用程序,但是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

但是结果相同:send事件没有触发。

2 个答案:

答案 0 :(得分:0)

根据注释中的信息,我假设您没有消息栏的出口,并且您没有为viewController设置委托。尝试在viewDidLoad中进行设置:

messageInputBar.delegate = self

为此,您的控制器必须继承MessagesViewController的子类,因此您的情况将在不断变化

class ViewController: UIViewController {

收件人:

class ViewController: MessagesViewController {

答案 1 :(得分:0)

我需要使用其他MessageKit版本:

pod 'MessageKit' , '1.0.0'