0

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


4

1 回答 1

1

这是由于以下代码而发生的-

@objc
func inputBar(_ inputBar: InputBarAccessoryView, didPressSendButtonWith text: String) {
    processInputBar(messageInputBar)
}

如果您在这里看到委托函数说didPressSendButtonWith并且您正在调用您的函数以在此处添加项目。因此,在按下发送后,您的函数会被调用,将项目添加到输入栏。

谢谢。

于 2021-01-25T12:15:08.667 回答