【问题标题】:How do I make inputAccessoryView stay on screen when using drag to dismiss?使用拖动关闭时如何使 inputAccessoryView 留在屏幕上?
【发布时间】:2016-06-08 13:38:31
【问题描述】:

我知道视图控制器必须是 firstResponder 才能使 inputAccessory 保持在底部。我正在使用自定义 inputView / 键盘。我可以通过删除 inputView 但不辞职第一响应者,使用完成按钮手动解除它。但是,当我在滚动视图上启用交互式拖动以关闭时,代码会自动退出第一响应者。那么如何使用交互式拖动来关闭并保持我的视图控制器作为第一响应者呢?以前有人做过吗?我想也许这是不可能的,我可能需要使用手势识别器进行自己的交互式拖动以解除。

更多信息: 我有一个在标准键盘和我的自定义键盘之间切换的按钮。我已经看到解除这些原因 2 键盘确实解除了通知。我以为我可以成为 keyboardDidHide 方法中的 firstResponder ,但这并没有很好地工作,因为我无法区分手动关闭键盘和交互式拖动操作之间的区别。这很重要,因为当我手动关闭时,我不需要重新加载输入视图或成为第一响应者,因为我已经处理了它。

任何建议都会很棒。我正在尝试在 UIViewController 级别上使用 inputView 和 inputAccessoryView。

【问题讨论】:

  • inputAccessoryView 是 UIViewController 上的仅获取道具。你是怎么设置的?

标签: ios objective-c uiviewcontroller inputaccessoryview


【解决方案1】:

好吧,在拉了我一天的头发之后,我有了一个答案。

使用我的视图控制器的canResignFirstResponder 就可以了。在viewWillAppear 我设置了一个BOOL responderOverride = YES;

viewWillDisappear我打电话

responderOverride = NO; [self resignFirstResponder];

当滚动视图上的交互式拖动尝试 resignFirstResponder 时,canResignFirstResponder 返回 no,这会阻止我的视图控制器退出并保持我的输入附件保留并位于屏幕底部。

还有很多其他代码可以重新加载输入视图,但由于真正的问题是如何强制控制器保持第一响应者,这样我们就不会丢失输入附件视图,所以这个解决方案有效。

【讨论】:

    【解决方案2】:
    override var canBecomeFirstResponder : Bool {
         get {
               retrun true
          }
    }
    

    这对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2016-07-03
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      相关资源
      最近更新 更多