3

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

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

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

4

2 回答 2

5

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

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

viewWillDisappear我打电话

responderOverride = NO; [self resignFirstResponder];

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

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

于 2016-03-02T14:58:55.620 回答
0
override var canBecomeFirstResponder : Bool {
     get {
           retrun true
      }
}

这对我有用

于 2019-07-26T02:26:30.993 回答