代码之家  ›  专栏  ›  技术社区  ›  Nick

防止急救人员恢复

  •  1
  • Nick  · 技术社区  · 6 年前

    如果视图控制器从 UINavigationController 堆栈,即使第一个响应者在 -viewWillDisappear: UINavigationControllerDelegate -navigationController:willShowViewController:animated: ,当同一个视图控制器被推回到导航堆栈时,第一个响应程序将被还原。我认为这可能是iOS 11中的新行为。

    在我的例子中,我重新配置了视图控制器,不希望第一个响应程序被恢复,但是似乎没有简单的方法来防止这种情况。我可以通过在视图控制器(它是 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: 被调用,之后它将动画化。此外,包含文本字段的表视图不能滚动到顶部,因为滚动位置在文本字段处恢复。唯一的选择似乎是在 -viewDidAppear: ,导致在视图出现后出现滚动。

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

    0 回复  |  直到 6 年前
        1
  •  0
  •   Domagoj BoroÅ¡    5 年前

    我有一个类似的问题,我发现如果你在呈现视图控制器开始后辞去第一个响应者的职务,你将得到第一个响应者的恢复。如果你在它无法恢复之前打电话给它。得到 viewWillAppear: 或者任何其他被调用的外观方法意味着演示(或者转换)已经开始。

    在打电话之前让第一个响应者辞职 presentViewController:animated:completion: 或任何其他呈现/转换方法。我没有试过但我猜你可以辞职 prepareForSegue:sender: .

    希望这有帮助。