【问题标题】:What is the proper way to override inputAccessoryViewController so that it works on both iOS 9 and iOS 10什么是覆盖 inputAccessoryViewController 以便它在 iOS 9 和 iOS 10 上工作的正确方法
【发布时间】: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 
    }
}

我试图找出问题所在,所以我确实覆盖了 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 9 上,只有当我点击文本字段时,inputAccessoryView 才会被调用。 在 iOS 10 上,当我点击 textview 时,inputAccessoryViewinputAccessoryViewController 都会被调用。

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

【问题讨论】:

    标签: ios swift ios9 ios10 inputaccessoryview


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-01
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      相关资源
      最近更新 更多