I'm building an app using MessageKit.
I added an InputBarItem to the input bar, but it doesn't appear when the view first appears. Only after I pressed "send", the item shows up.
Below is part of the ChatViewController. Any idea why this happens?
Thank you!
class ChatViewController: MessagesViewController {
....
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
...
messageInputBar.delegate = self
setupConstraints()
}
}
extension ChatViewController: MessagesDataSource {
...
}
// MARK: - MessageInputBarDelegate
extension ChatViewController: InputBarAccessoryViewDelegate {
@objc
func inputBar(_ inputBar: InputBarAccessoryView, didPressSendButtonWith text: String) {
processInputBar(messageInputBar)
}
private func makeButton(named: String) -> InputBarButtonItem {
return InputBarButtonItem()
.configure {
$0.spacing = .fixed(10)
$0.image = UIImage(systemName: named)?.withRenderingMode(.alwaysTemplate)
$0.setSize(CGSize(width: 25, height: 25), animated: false)
$0.tintColor = .blue
}
}
func processInputBar(_ inputBar: InputBarAccessoryView) {
let components = inputBar.inputTextView.components
inputBar.inputTextView.text = String()
let items = [
makeButton(named: "plus")
]
inputBar.setLeftStackViewWidthConstant(to: 36, animated: false)
inputBar.setStackViewItems(items, forStack: .left, animated: false)
}
}
It is happening because of following code -
@objc
func inputBar(_ inputBar: InputBarAccessoryView, didPressSendButtonWith text: String) {
processInputBar(messageInputBar)
}
If you see here the delegate function says didPressSendButtonWith and you are calling your function to add item here. So after pressing send your function gets called adding the item to input bar.
Thanks.