前提・実現したいこと
MessageKitを用いてチャット機能を実装しようとしています。
チャット機能のデータを入力するテキストフィールドに文字列を入れた後、送信ボタンを押したときにちゃんと送信ボタンが押されていることを確認しようとしたのですがうまくいきません。messageInputBar.delegate = selfが無いためそれを挿入すると良いのでは無いかと考え入れてみると以下のようなエラーメッセージが発生し何をすれば良いのか全く検討がつきません。
発生している問題・エラーメッセージ
Cannot assign value of type 'MessageKitChatViewController' to type 'InputBarAccessoryViewDelegate?' Add missing conformance to 'InputBarAccessoryViewDelegate' to class 'MessageKitChatViewController'
該当のソースコード
import UIKit import MessageKit import MessageInputBar import FirebaseFirestore import FirebaseAuth import FirebaseStorage import Nuke struct Sender: SenderType{ var senderId: String var displayName: String } struct MessageKitMessage: MessageType{ var sender: SenderType var messageId: String var sentDate: Date var kind: MessageKind } class MessageKitChatViewController: MessagesViewController, MessagesDataSource, MessagesLayoutDelegate, MessagesDisplayDelegate, MessageInputBarDelegate{ var senderUser = Auth.auth().currentUser! var messages = [MessageType]() let currentUser = Sender(senderId: Auth.auth().currentUser!.uid , displayName: Auth.auth().currentUser!.displayName ?? "Name not found") override func viewDidLoad() { super.viewDidLoad() messagesCollectionView.messagesDataSource = self messagesCollectionView.messagesLayoutDelegate = self messagesCollectionView.messagesDisplayDelegate = self messageInputBar.delegate = self } func currentSender() -> SenderType { return currentUser } func messageForItem(at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> MessageType { return messages[indexPath.section] } func numberOfSections(in messagesCollectionView: MessagesCollectionView) -> Int { return messages.count } func messageInputBar(_ inputBar: MessageInputBar, didPressSendButtonWith text: String) { // let message = MessageKitMessage(sender: currentUser, messageId: UUID().uuidString, sentDate: Timestamp().dateValue(), kind: .text(text)) print("押されました") } }
extensionをで分けた場合のコード
import UIKit import MessageKit import MessageInputBar import InputBarAccessoryView import FirebaseFirestore import FirebaseAuth import FirebaseStorage import Nuke struct Sender: SenderType{ var senderId: String var displayName: String } struct MessageKitMessage: MessageType{ var sender: SenderType var messageId: String var sentDate: Date var kind: MessageKind } class MessageKitChatViewController: MessagesViewController{ var senderUser = Auth.auth().currentUser! var messages = [MessageType]() let currentUser = Sender(senderId: Auth.auth().currentUser!.uid , displayName: Auth.auth().currentUser!.displayName ?? "Name not found") override func viewDidLoad() { super.viewDidLoad() messagesCollectionView.messagesDataSource = self messagesCollectionView.messagesLayoutDelegate = self messagesCollectionView.messagesDisplayDelegate = self messageInputBar.delegate = self } } extension MessageKitChatViewController: MessagesDataSource{ func currentSender() -> SenderType { return currentUser } func messageForItem(at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> MessageType { return messages[indexPath.section] } func numberOfSections(in messagesCollectionView: MessagesCollectionView) -> Int { return messages.count } } extension MessageKitChatViewController: MessagesLayoutDelegate{ } extension MessageKitChatViewController: MessagesDisplayDelegate{ } extension MessageKitChatViewController: MessageInputBarDelegate{ func messageInputBar(_ inputBar: MessageInputBar, didPressSendButtonWith text: String) { print("button pressed") } }
試したこと
class MessageKitChatViewController: MessagesViewController, MessagesDataSource, MessagesLayoutDelegate, MessagesDisplayDelegate, MessageInputBarDelegateにInputBarAccessoryViewDelegateを追加したりしてみましたが上手くいきませんでした
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/02/01 13:06 編集
2021/02/01 13:26
退会済みユーザー
2021/02/01 14:16