看不见的文本气泡MessageKit

问题描述 投票:0回答:1

我正在尝试为我的应用程序使用 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

当我打印消息时,我可以打印日志中的消息。

ios swift chat messagekit
1个回答
0
投票

首先,您应该按如下方式重新加载

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
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.