iOS8解除键盘关闭后,inputAccessoryView是否可见?

时间:2015-02-13 09:34:19

标签: ios8 uikeyboard inputaccessoryview

我想像消息应用程序一样做出行为。我一直在浏览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>'

为了测试这个,我做了一个示例项目,只有一个控制器底部有视图:

ViewController code

Storyboard

Outlet连接到底部视图,其上只有UITextField。我错过了什么,我如何得到理想的行为?

2 个答案:

答案 0 :(得分:2)

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

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

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

  1. 在您的.xib中创建一个inputAccessoryView()并将其返回到NSLayoutConstraint,而不是自己将其添加到任何超级视图中(键盘将会。

  2. 或者使用override func canBecomeFirstResponder() -> Bool { return true } 完全在代码中完成。

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

    {{1}}

    查看this GitHub repo的示例。

答案 1 :(得分:2)

iOS8具有inputAccessoryView的保留周期。这是一篇好文章似乎有一个很好的解决方法:

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