我正在尝试使自定义inputAccessoryView包含UITextField,并像聊天应用程序一样将其停靠在底部
但是如果我不使用canBecomeFirstResponder = true,inputAccessoryView是隐藏的(?)
这是我的密码
class MainVC: UITableViewController {
lazy var inputTextFieldContainer: UIView = {
// custom inputAccessoryView
}()
override func viewDidLoad(){
super.viewDidLoad()
}
override var inputAccessoryView: UIView? {
get{
return containerView
}
}
override var canBecomeFirstResponder: Bool {
get {
return true
}
}
}canBecomeFirstResponder如何自定义inputAccessoryView
我在苹果文档上读到了UIResponder和回应者链
但我无法将这个概念与这个问题相匹配。
他们说UIResponder将处理这些事件,我让我的MainVC成为canBecomeFirstResponder = true的第一个响应者
和inputAccessoryView显示
但是,在这种情况和情况下,确切的事件是什么?
发布于 2018-04-01 20:52:14
由于您的代码在这里继承自UITableViewController,因此有一个完整的示例:
从定义附件视图开始。由于您提到了一个聊天应用程序,它可以是一个文本字段和一个发送按钮:
class SendMessageView: UIView {
private let textField = UITextField()
private let sendButton = UIButton()
init() {
super.init(frame: CGRect.zero)
self.setup()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) not implemented")
}
private func setup() {
sendButton.setTitle("Send", for: UIControlState.normal)
sendButton.setTitleColor(UIColor.blue, for: UIControlState.normal)
self.addSubview(textField)
self.addSubview(sendButton)
self.backgroundColor = UIColor.groupTableViewBackground
textField.backgroundColor = UIColor.white
self.autoresizingMask = .flexibleHeight
textField.translatesAutoresizingMaskIntoConstraints = false
sendButton.translatesAutoresizingMaskIntoConstraints = false
textField.topAnchor.constraint(equalTo: self.topAnchor, constant: 8).isActive = true
textField.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 16).isActive = true
sendButton.leadingAnchor.constraint(equalTo: textField.trailingAnchor, constant: 8).isActive = true
sendButton.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -16).isActive = true
sendButton.centerYAnchor.constraint(equalTo: textField.centerYAnchor).isActive = true
}
override var intrinsicContentSize: CGSize {
let contentHeight = self.textField.intrinsicContentSize.height + 16
return CGSize(width: UIScreen.main.bounds.width, height: contentHeight)
}
}接下来,您需要一个使用我们的附件视图的自定义UITableView:
class CustomTableView: UITableView {
private let sendMessageView = SendMessageView()
override var canBecomeFirstResponder: Bool {
return true
}
override var inputAccessoryView: UIView? {
return self.sendMessageView
}
}最后,可以使用这个自定义表视图定义一个TableViewController:
class TableViewController: UITableViewController {
override func loadView() {
self.tableView = CustomTableView()
self.view = self.tableView
}
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.becomeFirstResponder()
}
...结果如下所示:
[

https://stackoverflow.com/questions/49586673
复制相似问题