UITextView删除inputAccessoryView

时间:2018-08-21 19:11:37

标签: ios swift input uitextview inputaccessoryview

我正在尝试实现一个固定在键盘顶部的工具栏。

我已经做到了:

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

0 个答案:

没有答案