Reputation: 3100
I have an app using the standard implementation of Messagekit
but the didTapMessage
event isn't firing when I tap the message text (the didTapAvatar
function isn't run at all either). I'm not using a custom cell so I don't think I need to use a custom gesture recognizer.
Here's the relevant code as follows:
import UIKit
import Firebase
import FirebaseFirestore
import MessageKit
import MessageInputBar
class ChatViewController: MessagesViewController {
// MARK: Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
messageInputBar.delegate = self
messagesCollectionView.messagesDataSource = self
messagesCollectionView.messagesLayoutDelegate = self
messagesCollectionView.messagesDisplayDelegate = self
.....
}
// MARK: Properties
...
}
extension ChatViewController: MessagesDataSource {
func currentSender() -> Sender {
//guard let currentUserID = User.current?.key else {return nil}
let newSender = Sender(id: (User.current?.key)!, displayName: (User.current?.username)!)
return newSender
}
func numberOfSections(in messagesCollectionView: MessagesCollectionView) -> Int {
//return 1
return messages.count
}
func messageForItem(at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> MessageType {
return messages[indexPath.section]
func cellTopLabelAttributedText(for message: MessageType, at indexPath: IndexPath) -> NSAttributedString? {
return NSAttributedString(string: MessageKitDateFormatter.shared.string(from: message.sentDate), attributes: [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 10), NSAttributedString.Key.foregroundColor: UIColor.darkGray])
}
func messageTopLabelAttributedText(for message: MessageType, at indexPath: IndexPath) -> NSAttributedString? {
let name = message.sender.displayName
return NSAttributedString(string: name, attributes: [NSAttributedString.Key.font: UIFont.preferredFont(forTextStyle: .caption1)])
}
func messageBottomLabelAttributedText(for message: MessageType, at indexPath: IndexPath) -> NSAttributedString? {
let dateString = formatter.string(from: message.sentDate)
return NSAttributedString(string: dateString, attributes: [NSAttributedString.Key.font: UIFont.preferredFont(forTextStyle: .caption2)])
}
}
}
extension ChatViewController: MessagesDisplayDelegate, MessagesLayoutDelegate {}
extension ChatViewController: 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 ChatViewController: MessageInputBarDelegate {
func messageInputBar(
_ inputBar: MessageInputBar,
didPressSendButtonWith text: String) {
....
}
}
Any ideas? Thanks!
Upvotes: 3
Views: 2251
Reputation: 6648
I guess you lost this:
messagesCollectionView.messageCellDelegate = self
The full implementation reference (from https://github.com/MessageKit/MessageKit):
func configureMessageCollectionView() {
messagesCollectionView.messagesDataSource = self
messagesCollectionView.messageCellDelegate = self
scrollsToBottomOnKeyboardBeginsEditing = true // default false
maintainPositionOnKeyboardFrameChanged = true // default false
messagesCollectionView.addSubview(refreshControl)
refreshControl.addTarget(self, action: #selector(loadMoreMessages), for: .valueChanged)
}
Upvotes: 4