我需要制作 MessageKit 聊天应用程序,而无需在Swift中使用FireBase。任何人都有源代码,请把我放在这里。
谢谢。
答案 0 :(得分:1)
您完全可以使用想要的任何数据库来将消息工具包绑定到Firebase。
答案 1 :(得分:1)
您可以这样做:
MyMessagesViewController
并从 MessagesViewController
MessageKit 扩展它。final class MyMessagesViewController: MessagesViewController {
...
}
InputBarAccessoryView
从它扩展,覆盖 override func setup()
并设置您的子视图和布局。final class MyInputBarAccessoryView: InputBarAccessoryView {
override func setup() {
super.setup()
// All your setup here
}
}
并在 MyMessagesViewController
中创建 messageInputBar
:
required init(...) {
messageInputBar = MyInputBarAccessoryView()
}
override var canBecomeFirstResponder: Bool {
return true
}
override var inputAccessoryView: UIView? {
return messageInputBar
}
MessagesCollectionViewFlowLayout
,覆盖 cellSizeCalculatorForItem(at:)
并创建您自己的 CellSizeCalculator
,覆盖 messageContainerSize(for:)
以便为每条新消息返回一个 CGSize
。class MyMessagesCollectionViewFlowLayout: MessagesCollectionViewFlowLayout {
private let sizeCalculator = MyMessageSizeCalculator()
public override func cellSizeCalculatorForItem(at indexPath: IndexPath) -> CellSizeCalculator {
if case .custom = message.kind {
return sizeCalculator
}
return super.cellSizeCalculatorForItem(at: indexPath)
}
}
class MyMessageSizeCalculator: MessageSizeCalculator {
override func messageContainerSize(for message: MessageType) -> CGSize {
return size // Here you have to calculate your cell size based on message
}
}
MyMessagesViewController
viewDidLoad 方法中,创建 MessageCollectionView
,为单元格注册笔尖并设置委托。override func viewDidLoad() {
super.viewDidLoad()
messageCollectionView = MessageCollectionView(
frame: .zero,
collectionViewLayout: MyCollectionViewFlowLayout()
)
// Common setups here
// delegates
messagesCollectionView.messagesDataSource = self
}
MessagesDataSourceDelegate
方法上,实现 currentSender()
并返回您的 OWN currentSender,就像您在使用 Firebase 时必须做的那样,但现在您必须使用服务器发送者 ID 或类似的东西。在您创建自己的自定义单元格时,实施 customCell(for:, at:, in:)
并正确地将您注册的单元格出列。func currentSender() -> SenderType {
// You have to create some model that extends from SenderType and return here okay?
return myClientSender
}
func customCell(
for message: MessageType,
at indexPath: IndexPath,
in messagesCollectionView: MessagesCollectionView) -> UICollectionViewCell {
// dequeue correctly the cell based on message and indexPath
return cell
}
这是 MessageKit 自定义单元的基本实现。显然你想实现更多的东西。
希望能帮到你 :)