MessageKit: the added input bar button only appears after I sent a message

1.2k Views Asked by At

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)
    }
}


1

There are 1 best solutions below

0
On BEST ANSWER

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.