为什么在后退导航时我的inputAccessoryView消失了?

7
我在一个由UINavigationController推送的VC中实现了自己的inputAccessoryView。

这是VC的样子:请注意底部的inputAccessoryView(带有按钮和文本字段的白色条)

1]

当我从屏幕左侧向右滑动(以关闭当前VC并返回),inputAccessoryView会向下移动并消失。此外,如果我在任何地方停止滑动手势并让当前VC跳回(以便不被关闭),inputAccessoryView也会向下移动并消失。

我在移动时附上了另一张照片:

2]

VC跳回后又有了另一张照片:

3]

如您所见,inputAccessoryView已经消失了。

我的代码片段:

private final lazy var inputContainerView: UIView = {
    let containerView = UIView()
    containerView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 50)
    [...]
    return containerView
}()
[...]


override var inputAccessoryView: UIView? {
    return inputContainerView
}

override var canBecomeFirstResponder: Bool {
    return true
}

当您推送到视图控制器时,您是否隐藏选项卡栏? - Jay Patel
展示你添加inputContainerView的代码。 - Jay Patel
我正在隐藏选项卡栏。添加inputContainerView的代码已经存在。它是附属视图。@JD。 - j3141592653589793238
1个回答

5

您可能想尝试在viewWillAppearviewDidAppear中调用self.becomeFirstResponder(),当这种情况发生时,两者都会被触发。


是的,那个很好用... xD 非常感谢!有没有一个简单的解释说明 becomeFirstResponder() 是做什么的? - j3141592653589793238
2
只有当其绑定的对象的 isFirstResponder 值为 true 时,inputAccessoryView 才会显示。在这种情况下,该对象是您的 viewController(这就是为什么要重写 canBecomeFirstResponder)。我不是100%确定,但我认为在这种情况下,当发生并取消拖动操作时,第一响应者没有正确地返回到此 viewController...因此我们必须强制它发生。 - tpeodndyy
重写函数viewWillAppear(_ animated: Bool):{ self.becomeFirstResponder() } - torun

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