4

我正在尝试实现一个在键盘上浮动的 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 
    }
}

我试图弄清楚出了什么问题,所以我确实覆盖了两者inputAccessoryViewControllerinputAccessoryView并在每个方法中放置了断点。

    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 9inputAccessoryView上,只有当我点击文本字段时才会调用。在 iOS 10 上,当我点击 textview 时,两者都会被调用inputAccessoryViewinputAccessoryViewController

什么是覆盖的正确方法inputAccessoryViewController?我认为我不应该同时覆盖inputAccessoryViewinputAccessoryViewController

4

1 回答 1

0

我遇到了类似的问题,在我的情况下,并没有调用inputAccessoryViewController和覆盖方法。canBecomeFirstResponder这是因为ViewController不是 的子类UIViewController

于 2020-07-25T06:39:29.790 回答