Я пытаюсь реализовать простое приложение для обмена сообщениями, но методы 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
Но тот же результат: событие отправки не запускается.