防止恢复第一响应者

时间:2018-08-13 13:36:31

标签: ios uinavigationcontroller uitextfield uikit

如果在将视图控制器从UINavigationController堆栈中弹出时视图是第一响应者,即使第一响应者在-viewWillDisappear:UINavigationControllerDelegate的{​​{1}}中辞职了,当将同一视图控制器推回导航堆栈时,将还原第一响应者。我认为这可能是iOS 11中的新行为。

在我的情况下,我重新配置了视图控制器,并且不希望还原第一个响应者,但是似乎没有简单的方法可以防止这种情况的发生。我可以通过在视图控制器(-navigationController:willShowViewController:animated:的委托)中执行以下操作来防止这种情况:

UITextField

但是,这会导致出现一个小的动画,在该场景中稍微滚动视图以适应在调用- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { // do not begin editing when transitioning from/to this view controller. // UINavigationController restores the previous input view first responder, we don't want that, this stops it return self.transitionCoordinator == nil; } 之前出现的键盘,然后动画返回。另外,包含文本字段的表格视图无法滚动到顶部,因为滚动位置已在文本字段中恢复。唯一的选择似乎是在-textFieldShouldBeginEditing:中设置滚动位置,从而导致在视图显示之后发生滚动。

有更好的方法来防止这种情况吗?

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,我发现如果在演示的视图控制器开始演示后辞职第一响应者,则将恢复第一响应者。如果您在无法恢复之前调用它。获得viewWillAppear:或任何其他出现方法都意味着演示(或转换)开始了。

在调用presentViewController:animated:completion:或任何其他表示/转换方法之前,请先辞职第一响应者。我没有尝试过进行隔离,但是我想您可以退出prepareForSegue:sender:

希望这会有所帮助。