我正在尝试实现一个固定在键盘顶部的工具栏。
我已经做到了:
class MyControllerWithTextView {
func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
let controller = ToolbarController() // init from storyboard in origin
addChildViewController(controller)
textView.inputAccessoryView = controller.view
controller.didMove(toParentViewController: self)
}
}
我真的很想拥有控制器,因为工具栏有逻辑,我不想将其显示在视图中或在MyControllerWithTextView
中放更多代码。
一切正常,直到用户选择文本中的某些内容并调用“查找”操作为止。取消“查找”后,我的ToolbarController
收到removeFromParentViewController
并被释放。在ToolbarController
中取消分配之前,我登录了父视图控制器:
override func removeFromParentViewController() {
print(parent.debugDescription)
super.removeFromParentViewController()
print("removeFromParentViewController")
print(parent.debugDescription)
}
deinit {
print("deinit")
}
所以我在控制台中收到的结果:
// first showing
Optional(<Project. MyControllerWithTextView: 0x7fb8a412b4a0>)
removeFromParentViewController
nil
// second time after I dismiss Look up action
Optional(<UICompatibilityInputViewController: 0x7fb8a413b5b0>)
removeFromParentViewController
nil
Optional(<UICompatibilityInputViewController: 0x7fb8a1558670>)
removeFromParentViewController
nil
deinit
有人可以解释发生了什么,我如何实现自己的愿望? 如果我只是通过一个简单的View,那么一切都会很好:
let view = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 50))
view.backgroundColor = .red
textView.inputAccessoryView = view