Ios8 键盘关闭后,是否让inputAccessoryView可见?

Ios8 键盘关闭后,是否让inputAccessoryView可见?,ios8,uikeyboard,inputaccessoryview,Ios8,Uikeyboard,Inputaccessoryview,我想做一些类似于短信应用的行为。我一直在浏览Stack Overflow,寻找解决方案,确实有很多: 这就是我找到的那个。但在iOS8中,情况似乎有些不同。如果在newiOS8 sdk中执行相同的操作,则会出现错误: 'UIViewControllerHierarchyInconsistency', reason: 'child view controller:<UICompatibilityInputViewController: 0x7fdcb3441b10> should h

我想做一些类似于短信应用的行为。我一直在浏览Stack Overflow,寻找解决方案,确实有很多:

这就是我找到的那个。但在
iOS8
中,情况似乎有些不同。如果在new
iOS8 sdk
中执行相同的操作,则会出现错误:

'UIViewControllerHierarchyInconsistency', reason: 'child view controller:<UICompatibilityInputViewController: 0x7fdcb3441b10> should have parent view controller:<ViewController: 0x7fdcb3b1e9f0> but requested parent is:<UIInputWindowController: 0x7fdcb684c000>'
'UIViewControllerHierarchyConsistency',原因:'子视图控制器:应具有父视图控制器:但请求的父视图控制器为:'
为了进一步测试这一点,我制作了一个示例项目,只有一个底部有视图的控制器:


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

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

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

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

  • 在视图中创建一个
    .xib
    ,并在
    inputAccessoryView()
    中返回该视图,而不是自己将其添加到任何superview(键盘将显示)

  • 或者使用
    NSLayoutConstraint
    完全在代码中创建

  • 您可以将以下代码添加到ViewController中,即使键盘处于隐藏状态,该代码也会保留视图

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

    请看一个例子。

    iOS8在inputAccessoryView中有一个保留周期。下面是一篇很好的文章,似乎有一个很好的解决方法:


    您是否尝试过在代码中初始化UIView并对其进行强引用?是的,结果是相同的。好的,最后一个问题-您使用的是哪个Xcode版本?包括内部版本号和所有内容?您尝试过我的答案吗?如果成功,请接受它作为正确答案。使用该解决方案的一个大问题是在视图(而不是视图控制器)上实现inputAccessoryView是因为在导航堆栈上推视图控制器时,附件视图的动画与视图不协调。附件视图不是使用视图控制器的视图设置动画并与其滑动,而是从底部向上设置动画,而vi电子战控制器视图从右侧滑入。