>

간단한 메시징 응용 프로그램을 구현하려고하는데 MessageInputBarDelegate  메소드가 실행되지 않습니다. MessagesDisplayDelegate와 같은 다른 확장 프로그램이 예상대로 실행되는 것 같습니다.

Swift 4.4.2를 사용하고 있습니다

포드 파일 :

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

메시지 리스너의 실행을 방해하는 메시지를 보내는 방법에서 무언가를 생략 했습니까?

포드 라이브러리 'MessageInputBar' 가 있습니다  이것도 활용해야합니까? 코드가 컴파일 될 때 이것을 필요로하지 않는 것 같습니다.

업데이트 :

messagesCollectionView에서 델리게이트를 설정하려고했습니다 :

messagesCollectionView.delegate = self as MessageInputBarDelegate as? UICollectionViewDelegate

그러나 같은 결과 : send 이벤트가 발생하지 않습니다.


  • 답변 # 1

    댓글의 정보를 보면 메시지 표시 줄에 콘센트가 없으며 viewController에 대리자가 설정되어 있지 않다고 가정합니다. viewDidLoad 에서 그것을 sese하려고 :

    messageInputBar.delegate = self
    
    
    이를 위해 컨트롤러는 MessagesViewController 를 서브 클래 싱해야합니다. 귀하의 상황에서 변경됩니다

    class ViewController: UIViewController {
    
    

    to :

    class ViewController: MessagesViewController {
    
    

  • 답변 # 2

    다른 MessageKit 버전을 사용해야했습니다.

    pod 'MessageKit' , '1.0.0'
    
    

  • 이전 python - Netcdf 데이터를 배열에 포함시킨 후 Nan의 모든 것을 얻는 이유는 무엇입니까?
  • 다음 javascript - arrayconcat () 메소드가 맞습니까?