在关闭键盘后让 inputAccessoryView 可见 iOS8?

Leaving inputAccessoryView visible after keyboard is dismissed iOS8?

我想制作类似消息传递应用程序的行为。我一直在浏览 Stack Overflow 寻找解决方案,确实有很多:

Leaving inputAccessoryView visible after keyboard is dismissed

这是我找到的。但是 iOS8 的情况似乎有些不同。如果我在新 iOS8 sdk 中做同样的事情,我会得到错误:

'UIViewControllerHierarchyInconsistency', reason: 'child view controller:<UICompatibilityInputViewController: 0x7fdcb3441b10> should have parent view controller:<ViewController: 0x7fdcb3b1e9f0> but requested parent is:<UIInputWindowController: 0x7fdcb684c000>'

为了对此进行更多测试,我制作了一个示例项目,只有一个底部有视图的控制器:

插座连接到底部视图,上面只有 UITextField。我错过了什么吗?如何获得所需的行为?

您正在将 someView 添加到多个超级视图,这会导致层次结构不一致(它告诉您)。

当键盘被激活时,它调用 inputAccessoryView() 方法来查看是否需要在键盘上粘贴任何东西,并将其添加到它自己的 superView 中。但是您已经通过故事板将其添加到视图中。

现在有两种方法可以解决这个问题:

  1. 用你的视图制作一个 .xib 并 return 你的 inputAccessoryView() 中的那个,不要自己将它添加到任何超级视图(键盘会。

  2. 或者使用 NSLayoutConstraint.

    在代码中完全实现

您可以将以下代码添加到您的 ViewController 中,即使键盘被隐藏,该代码也会保留视图。

override func canBecomeFirstResponder() -> Bool {
    return true
}

查看 this GitHub repo 示例。

iOS8 与 inputAccessoryView 有一个保留周期。这是一个很好的 post,似乎有一个很好的解决方法:

http://derpturkey.com/uitextfield-docked-like-ios-messenger/