我想像消息应用程序一样做出行为。我一直在浏览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>'
为了测试这个,我做了一个示例项目,只有一个控制器底部有视图:
Outlet连接到底部视图,其上只有UITextField
。我错过了什么,我如何得到理想的行为?
答案 0 :(得分:2)
您正在将someView
添加到多个超级视图中,这会导致层次结构不一致(它告诉您)。
当键盘被激活时,它会调用inputAccessoryView()
方法来查看它是否需要在键盘顶部粘贴任何东西,并将其添加到自己的superView中。但是您已经通过故事板将其添加到视图中。
现在有两种方法可以解决这个问题:
在您的.xib
中创建一个inputAccessoryView()
并将其返回到NSLayoutConstraint
,而不是自己将其添加到任何超级视图中(键盘将会。
或者使用override func canBecomeFirstResponder() -> Bool {
return true
}
完全在代码中完成。
您可以将以下代码添加到ViewController中,即使键盘被隐藏,它也会保留视图。
{{1}}
查看this GitHub repo的示例。
答案 1 :(得分:2)
iOS8具有inputAccessoryView的保留周期。这是一篇好文章似乎有一个很好的解决方法:
http://derpturkey.com/uitextfield-docked-like-ios-messenger/