【发布时间】:2022-01-03 15:50:46
【问题描述】:
我正在尝试实现一个输入附件视图,其工作方式与 iOS 中的消息应用程序类似。我搜索了几乎所有关于这个主题的 SO 问题,但找不到适合我的解决方案。
这是我创建的最小可重现代码,参考这个SO post。
import UIKit
class TestViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
becomeFirstResponder() // seems unnecessary
}
override var inputAccessoryView: UIToolbar {
return self.keyboardAccessory
}
override var canBecomeFirstResponder: Bool {
return true
}
var textView: UITextView = {
let view = UITextView()
view.translatesAutoresizingMaskIntoConstraints = false
view.backgroundColor = .yellow
return view
}()
lazy var keyboardAccessory: UIToolbar = {
let inputAccessory = UIToolbar(frame: .init(x: 0, y: 0, width: 0, height: 100))
inputAccessory.addSubview(textView)
NSLayoutConstraint.activate([
textView.centerXAnchor.constraint(equalTo: inputAccessory.centerXAnchor),
textView.centerYAnchor.constraint(equalTo: inputAccessory.centerYAnchor),
textView.widthAnchor.constraint(equalToConstant: 200),
textView.heightAnchor.constraint(equalToConstant: 50)
])
inputAccessory.backgroundColor = .gray
return inputAccessory
}()
}
我看到的每篇文章都建议覆盖 inputAccessoryView 和 canBecomeFirstResponder,仅此而已。但是,直到我点击textView,键盘才会出现。
谁能告诉我我错过了什么?
编辑
正如@DonMag 所指出的,iOS 中的消息应用程序不会自动显示键盘。请考虑在 Facebook 中关注 UI。
当我按下评论按钮时,它会在弹出键盘时推送到另一个视图控制器。过渡效果不必完全相同,但我希望键盘在呈现的视图控制器中完全加载,就好像我在viewDidLoad 中调用了becomeFirstResponder()。
【问题讨论】:
标签: ios swift uikit uitextview