【问题标题】:Why does my inputAccessoryView disappear when navigating backwards?为什么我的 inputAccessoryView 在向后导航时会消失?
【发布时间】:2018-08-14 08:01:11
【问题描述】:

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

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

当我从屏幕的左向右滑动时(为了关闭当前的 VC 并返回),inputAccessoryView 向下移动并消失。此外,如果我在任何地方停止滑动手势并让当前的 VC 跳回来(这样它就不会被关闭),inputAccessoryView 也会向下移动并消失。

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

VC跳回来后的另一个:

如您所见,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
}

【问题讨论】:

  • 推送到视图控制器时是否隐藏标签栏?
  • 显示添加 inputContainerView 的代码
  • 我正在隐藏标签栏。添加 inputContainerView 的代码已经存在。这是附件视图。 @JD。

标签: ios swift first-responder inputaccessoryview


【解决方案1】:

您可能想尝试调用

self.becomeFirstResponder() 中的viewWillAppearviewDidAppear 在发生这种情况时都会被触发。

【讨论】:

  • 是的,效果很好... xD 非常感谢!对 becomeFirstResponder() 的作用有什么简单的解释吗?
  • inputAccessoryView 将仅在其绑定到 isFirstResponder 值的对象为真时显示。在这种情况下,该对象就是您的 viewController(这就是您覆盖 canBecomeFirstResponder 的原因)。我不是 100% 确定,但我认为在这种情况下,当拖动动作发生并取消时,第一响应者没有正确地退回到这个 viewController ......所以我们必须强制它发生。
  • override func viewWillAppear(_ animated: Bool) { self.becomeFirstResponder() } 是的,这对我有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多