【发布时间】:2017-11-27 07:10:15
【问题描述】:
我正在尝试实现一个在键盘上浮动的 textView(如 iMessage 应用程序)我想使用 inputAccessoryViewController 以便我可以拥有视图控制器,而不仅仅是通过覆盖 inputAccessoryView 的视图。我已经编写了下面的代码,但它在 iOS 9 中存在问题,当您点击时 textView 消失并且键盘上的 textView 弹出。它在 iOS 10 中运行良好。
class ViewController: UIViewController {
var textEntryController = TextEntryController.fromNIB()
override var inputAccessoryViewController: UIInputViewController? {
return self.textEntryController
}
override var canBecomeFirstResponder: Bool {
return true
}
}
我试图找出问题所在,所以我确实覆盖了 inputAccessoryViewController 和 inputAccessoryView 并在每个方法中设置了断点。
override var inputAccessoryViewController: UIInputViewController? {
return self.textEntryController //break point
}
override var inputAccessoryView: UIView? {
return self.textEntryController.view //break point
}
这解决了 iOS 9 上 textview 消失的问题,但我觉得不对。这可能会破坏视图控制器层次结构。
观察:
在 iOS 9 和 iOS 10 上,当我启动应用程序时,这两种方法都会被调用
在 iOS 9 上,只有当我点击文本字段时,inputAccessoryView 才会被调用。
在 iOS 10 上,当我点击 textview 时,inputAccessoryView 和 inputAccessoryViewController 都会被调用。
覆盖inputAccessoryViewController 的正确方法是什么?我认为我不应该同时覆盖 inputAccessoryView 和 inputAccessoryViewController。
【问题讨论】:
标签: ios swift ios9 ios10 inputaccessoryview