我正在尝试实现一个简单的消息传递应用程序,但这些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")
}
我是否在发送消息时遗漏了一些阻止消息侦听器被触发的内容?
有一个 pod 库'MessageInputBar'
,我也应该利用它吗?看来我不需要这个,因为代码编译?
更新 :
我尝试在 messagesCollectionView 上设置委托:
messagesCollectionView.delegate = self as MessageInputBarDelegate as? UICollectionViewDelegate
但同样的结果:发送事件没有触发。