Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
187 views
in Technique[技术] by (71.8m points)

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

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


question from:https://stackoverflow.com/questions/65884488/messagekit-the-added-input-bar-button-only-appears-after-i-sent-a-message

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...