iOS8中如何在键盘消失后保持inputAccessoryView可见?

4
我希望实现类似于消息应用的行为。我一直在浏览Stack Overflow,寻找解决方案,确实有很多: 在键盘消失后保留inputAccessoryView 这是我发现的一个。但是在新的中,似乎情况有些不同。如果我做同样的事情,会出现错误:
'UIViewControllerHierarchyInconsistency', reason: 'child view controller:<UICompatibilityInputViewController: 0x7fdcb3441b10> should have parent view controller:<ViewController: 0x7fdcb3b1e9f0> but requested parent is:<UIInputWindowController: 0x7fdcb684c000>'

为了更好地测试这个,我做了一个样例项目,只有一个带有底部视图的控制器:

ViewController code

Storyboard

插座连接到底部视图,该视图上只有UITextField。我是否遗漏了什么,如何获得所需的行为?


1
你尝试过在代码中初始化UIView并对其进行强引用吗? - arik
是的,结果是一样的。 - MegaManX
非常奇怪。好的,最后一个问题 - 你使用哪个Xcode版本?包括构建号码和其他所有信息? - arik
你尝试过我的答案了吗?如果可行,请接受它作为正确的答案。 - vrwim
2个回答

2
您正在将someView添加到多个superView中,这会导致层次结构不一致(它正在告诉您)。
当键盘激活时,它调用inputAccessoryView()方法以查看是否需要将任何内容粘贴到键盘顶部,并将其添加到其自己的superView中。但是,您已经通过storyboard将其添加到了视图中。
现在有两种解决方法:
  1. 使用您的视图创建一个.xib并在inputAccessoryView()中返回该视图,而不将其添加到任何superview中(键盘将会添加)。

  2. 或者完全使用NSLayoutConstraint来编写代码。

您可以向ViewController添加以下代码,即使键盘隐藏,该视图也将保留。
override func canBecomeFirstResponder() -> Bool {
    return true
}

请看这个GitHub仓库的示例。


2

使用那种实现在视图上而不是视图控制器上实现inputAccessoryView的解决方法的一个大问题是,当将视图控制器推入导航堆栈时,附加视图的动画与视图不协调。附加视图不会随着视图控制器的视图一起滑动,而是从底部向上动画,而视图控制器的视图则从右侧滑入。 - kball

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接