我正在尝试为我的应用程序使用 messageKit 库。即使是界面构建的开始我也遇到了问题。尽管我设计的代码块如快速入门和一些使用视频中所示,但当我运行它时,没有像示例中那样的文本气泡。我有文本栏和发送按钮,我看不到文本气泡,也无法激活键盘。下面是我的代码块。如果您知道有关如何完全使用 messagekit 的某种来源(除了 iosacademy youtubechannel,因为它对我没有帮助),请告诉我。
import UIKit
import MessageKit
struct Message: MessageType {
var sender: SenderType
var messageId: String
var sentDate: Date
var kind: MessageKind
}
struct Sender: SenderType {
var senderId: String
var displayName: String
}
class ChatViewController: MessagesViewController {
private var messages = [Message]()
private let selfSender = Sender(senderId: "12", displayName: "noah")
override func viewDidLoad() {
super.viewDidLoad()
messages.append(Message(sender: selfSender,
messageId: "2",
sentDate: Date(),
kind: .attributedText(NSAttributedString(string: "nsattributedstring example", attributes: [NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: 21)]))))
print("messages: \(messages)")
view.backgroundColor = .red
messagesCollectionView.messagesDataSource = self
messagesCollectionView.messagesLayoutDelegate = self
messagesCollectionView.messagesDisplayDelegate = self
}
}
extension ChatViewController: MessagesDataSource, MessagesLayoutDelegate, MessagesDisplayDelegate {
var currentSender: SenderType {
return selfSender
}
func messageForItem(at indexPath: IndexPath, in messagesCollectionView: MessageKit.MessagesCollectionView) -> any MessageKit.MessageType {
return messages[indexPath.section]
}
func numberOfSections(in messagesCollectionView: MessageKit.MessagesCollectionView) -> Int {
return messages.count
}
}
xcode 15.3 消息套件4.2.0 iOS 17.2
当我打印消息时,我可以打印日志中的消息。
首先,您应该按如下方式重新加载
messagesCollectionView
中的viewDidLoad
数据(确定设置消息后):
messagesCollectionView.reloadData()
然后您应该将以下扩展添加到视图控制器来处理输入的消息。
extension ChatViewController: InputBarAccessoryViewDelegate {
func inputBar(_ inputBar: InputBarAccessoryView, didPressSendButtonWith text: String) {
processInputBar(inputBar) //
}
}
另外不要忘记设置委托:
messageInputBar.delegate = self
messageInputBar
是 MessagesViewController 的默认文本字段,就像 messagesCollectionView
一样。所以不用担心你不需要声明。
将此函数添加到视图控制器中以处理消息。由于它可以是照片、消息、视频或音频等。您应该首先检查它是否是字符串。
private func processInputBar(_ inputBar: InputBarAccessoryView) {
let components = inputBar.inputTextView.components
for component in components {
if let message = component as? String {
// handle the message
}
}
}