标签: messagekit

如何在Swift 4中正确实现MessageKit?| 委托函数没有被调用

我试图在我的iOS swift应用程序中为聊天功能实现MessageKitJSQMessagesViewController的替换)。我遵循了raywenderlich教程。我使用Pods进行安装,并逐步遵循了本教程。我的消息正在显示。根据本教程,为了隐藏用户头像,我将viewController设置为messagesLayoutDelegate和的委托messagesDisplayDelegate

//Inside view did load, i set the delegates, along with data source
messagesCollectionView.messagesDataSource = self
messagesCollectionView.messagesLayoutDelegate = self
messagesCollectionView.messagesDisplayDelegate = self
Run Code Online (Sandbox Code Playgroud)

但是,MessagesLayoutDelegate没有调用的委托函数。

我想隐藏用户头像,所以我在viewController中采用了协议

extension ChatLogVC_MessageKit: MessagesLayoutDelegate {

 func avatarSize(for message: MessageType, at indexPath: IndexPath,
              in messagesCollectionView: MessagesCollectionView) -> CGSize {

    //return zero size for hiding avatar, but this function is not being called. 

  return .zero
 }

 func footerViewSize(for message: MessageType, at indexPath: IndexPath,
                      in messagesCollectionView: MessagesCollectionView) …
Run Code Online (Sandbox Code Playgroud)

ios swift messagekit

9
推荐指数
1
解决办法
6136
查看次数

添加对自定义单元格的支持后,MessageKit Collection View 不显示任何单元格`

我已经阅读了在MessageKit 中创建自定义单元格的指南,以及这样的问题

我正在尝试创建一个自定义单元格;这是我的继承自 a 的单元格的代码UICollectionViewCell

import UIKit
import MessageKit

open class ChatReferenceCell: UICollectionViewCell {
    
    @IBOutlet weak var authorLabel: UILabel!
    @IBOutlet weak var referenceText: UITextView!
    @IBOutlet weak var participantsLabel: UILabel!
    
    public override init(frame: CGRect) {
        super.init(frame: frame)
        setupSubviews()
    }
    
    public required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupSubviews()
    }
    
    open func setupSubviews() {
    }
    
    open override func layoutSubviews() {
        super.layoutSubviews()
    }
    
    open func configure(with message: MessageType, at indexPath: IndexPath, and messagesCollectionView: MessagesCollectionView) {
        // Do stuff
        switch …
Run Code Online (Sandbox Code Playgroud)

ios uicollectionview uicollectionviewlayout swift messagekit

6
推荐指数
1
解决办法
1072
查看次数

如何使用 MessageKit 创建自定义单元格?

我想使用创建以下自定义聊天气泡MessageKit

在此输入图像描述

我正在使用CustomCell提供的示例中的示例。但这并没有添加基于发件人类型的聊天气泡背景和定位。

如何创建具有相同聊天气泡背景的自定义单元格?

chat ios swift messagekit

5
推荐指数
1
解决办法
7634
查看次数

UIViewControllerRepresentable MessageKit UICollectionView 在显示键盘时滚动经过底部项目

我正在使用 SwiftUI 构建一个应用程序,并且想使用 MessageKit,因此我使用 aUIViewControllerRepresentable来显示 MessageKit 视图。但是,当显示键盘时,消息可以滚动到视图底部。

这是问题的屏幕截图: 滚动到底部并显示键盘

我仍然可以向下滚动消息,但尝试将消息推UICollectionView到底部会导致同样的问题。隐藏键盘时不会出现此问题。

下面是捕获的 UI 层次结构的屏幕截图,其中隐藏了导航栏和根视图: 查看层次结构

集合视图的大小仍然正确,但消息可以滚动到底部,并且滚动指示器位于顶部。

这是带有相关代码的根 SwiftUI 视图:

struct SingleChatView: SwiftUI.View {
    @ObservedObject var chat: Chat
    
    @State private var mkView: MessageKitView
    
    init(chat: Chat) {
        self.chat = chat
        _mkView = State(initialValue: MessageKitView(chat: chat))
    }
    
    var body: some SwiftUI.View {
        mkView
            .navigationBarTitle(chat.name)
            .uiKitOnAppear {
                mkView.controller.becomeFirstResponder()
                mkView.controller.messagesCollectionView.scrollToBottom(animated: true)
                
                chat.clearNotifications()
                
                // Set chat as active
                ChatManager.shared.activeChat = chat
            }
            .onDisappear {
                chat.setTypingStatus(to: false)
                // Set chat as inactive
                ChatManager.shared.activeChat = nil
            } …
Run Code Online (Sandbox Code Playgroud)

uikit swift messagekit swiftui

5
推荐指数
0
解决办法
720
查看次数

Swift MessageKit问题-运行Swift 4.2

我刚刚将代码更新为Swift 4.2,并修复了所有错误。现在,我正在尝试使用“ MessageKit”将Messenger放入我的应用程序。一切都已更新,但我遇到了这些问题...MessagesInputBarDelegate

“使用未声明的类型'MessagesInputBarDelegate'”

“使用未声明的类型'MessageInputBar'”

也,

“参数标签'(类型:)'与任何可用的重载都不匹配”

“无法转换'_类型的值?' 预期的参数类型“ URL?”

使用未声明的类型'MessagesInputBarDelegate'

使用未声明的类型'MessageInputBar'

extension CustomerChatViewController: MessagesInputBarDelegate {

func messageInputBar(_ inputBar: MessageInputBar, didPressSendButtonWith text: String) {
    let message = Message(user: user, content: text)

    save(message)
    inputBar.inputTextView.text = ""
}

}
Run Code Online (Sandbox Code Playgroud)

参数标签'(type :)'不匹配任何可用的重载

let cameraItem = UIBarButtonItem(type: .system)
Run Code Online (Sandbox Code Playgroud)

无法转换类型“ _”的值 预期的参数类型“ URL?”

let imageName = [UUID().uuidString, String(Date().timeIntervalSince1970)].joined()
    storage.child(channelID).child(imageName).putData(data, metadata: metadata) { meta, error in
        completion(meta?.downloadURL())
    }
Run Code Online (Sandbox Code Playgroud)

swift messagekit

4
推荐指数
1
解决办法
1705
查看次数

MessageKit 不显示消息输入栏 Swift 5

所以这是控制器层次结构 tabBarController -> 一些控制器和聊天频道控制器。

而这个聊天频道控制器也是一个导航控制器。当我选择行时,它会推送到 MessageViewController 类的聊天控制器。

我在这里有两个问题,一个是次要的,一个是主要的。

次要的是那个分身。

    func avatarSize(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> CGSize {
        print("delegate method called")
        return .zero
}
Run Code Online (Sandbox Code Playgroud)

我在其中一个代表中将其设置为零,但它仍然显示。而且它从不打印语句。

主要的一个是输入栏根本没有显示。我的 pod 文件中已经有 InputBarAccessoryView 并且

messageInputBar.delegate = self as InputBarAccessoryViewDelegate

extension ChatViewController: InputBarAccessoryViewDelegate {

    func inputBar(_ inputBar: InputBarAccessoryView, didPressSendButtonWith text: String) {
        print("text")
    }

}
Run Code Online (Sandbox Code Playgroud)

但没有显示。我也检查了视图,我找不到它 聊天视图 查看层次结构

ios swift messagekit

4
推荐指数
2
解决办法
3842
查看次数

使用 Firebase 查询重新加载数据后重复 collectionView 单元格

我有一个 Firebase 快照侦听器,用于检查新文档,将它们添加到数组(collectionView 数据源),然后重新加载 collectionView。但是,我在 collectionView 中得到了重复的单元格。我的 Firestore 集合中目前有 3 个对象,但它们被复制了总共 9 个单元格。

我什至添加了对索引的检查,因此 reloadData 仅在到达数组末尾后才会发生。这是相关的代码:

messageListener = query.addSnapshotListener { querySnapshot, error in
    guard let snapshot = querySnapshot else {
        print("Error listening for channel updates: \(error?.localizedDescription ?? "No error")")
        return
    }
    
    snapshot.documentChanges.forEach { change in

        if change.type == .added {
            for document in snapshot.documents{
                
                 ....

                let newMessage = Message(sender: newSender, messageId: document.documentID, sentDate: date, text: text)
                
                self.messages.append(newMessage)
                
                guard let index = snapshot.documents.index(of: document) else {return}
                
                if index == (snapshot.documents.count - …
Run Code Online (Sandbox Code Playgroud)

ios firebase swift google-cloud-firestore messagekit

2
推荐指数
1
解决办法
639
查看次数

MessageKit-如何在MessagesViewController的子类中异步加载图像?

最近,我一直在开发聊天应用程序,但在通过聊天异步加载图像时遇到了麻烦。

使用MessageKit-2.0

我试过了

import MessageKit

class Image: MediaItem {
  var url: URL?

  var image: UIImage?

  var placeholderImage: UIImage

  var size: CGSize

  init(url: URL) {
    self.url = url
    self.size = CGSize(width: 240, height: 240)
    self.placeholderImage = UIImage()
    DispatchQueue.global().async {
        if let data = try? Data(contentsOf: url) {
            if let image = UIImage(data: data) {
                DispatchQueue.main.async {
                    self.image = image
                }
            }
        }
    }
}

init(image: UIImage) {
    self.image = image
    self.size = CGSize(width: 240, height: 240)
    self.placeholderImage = UIImage()
}
Run Code Online (Sandbox Code Playgroud)

} …

ios swift messagekit

1
推荐指数
1
解决办法
739
查看次数

编辑 MessageKit 布局

这是我第一次使用 MessageKit。我正在尝试自定义我的视图,但找不到任何有关如何执行此操作的有用信息,例如设置插图和更改背景颜色。

我目前的布局

我想从标题栏下方启动视图并更改背景颜色和消息的背景颜色。

func backgroundColor(for message: MessageType, at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> UIColor {
        return isFromCurrentSender(message: message) ? UIColor.myGold : UIColor.headingGold
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

layout user-interface ios swift messagekit

0
推荐指数
1
解决办法
2219
查看次数

如何在MessageKit中发送消息时实现有关错误的信息?迅速

如何在MessageKit中发送消息时实现有关错误的信息?当消息不发送时,我需要显示信息。有任何想法吗?

ios swift messagekit

-2
推荐指数
1
解决办法
442
查看次数