找出用户是否按下了uinavigationcontroller中的后退按钮?

And*_*rew 62 iphone objective-c

加载视图时,我想查看是否是因为用户按下了后退按钮.我怎么检查这个?

And*_*rew 108

我发现检测UINavigationController的后退按钮(iOS 5.0之前)的最佳解决方案是通过验证当前视图控制器不在导航控制器的视图控制器堆栈中.

- (void)viewDidDisappear:(BOOL)animated以逻辑方式检查此条件可能更安全,在调用方法时,视图控制器极有可能从堆栈中删除.

iOS 5.0之前:

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    if (![[self.navigationController viewControllers] containsObject:self]) {
        // We were removed from the navigation controller's view controller stack
        // thus, we can infer that the back button was pressed
    }
}
Run Code Online (Sandbox Code Playgroud)

iOS 5.0+你可以使用-didMoveToParentViewController:

- (void)didMoveToParentViewController:(UIViewController *)parent
{
    // parent is nil if this view controller was removed
}
Run Code Online (Sandbox Code Playgroud)

  • 在推送VC时也会调用此函数(至少在iOS 6上). (4认同)
  • 我已经更新了iOS 5.0中添加的新方法的答案. (3认同)
  • didMoveToParentViewController; 这不是一个好的解决方案,当出现此视图时也会调用它. (2认同)
  • 您需要检查父项是否为nil,以确定是添加还是删除了视图. (2认同)

小智 80

在您的viewWillDisappear方法中检查

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    if ([self isMovingFromParentViewController]) {
      //specific stuff for being popped off stack
    }
}
Run Code Online (Sandbox Code Playgroud)

这仅适用于iOS 5后

  • 作为替代方案,受安德鲁答案的启发,你可以通过重写`willMoveToParentViewController:`而不是`didMoveToParentViewController:`来做一些事情. (2认同)

mak*_*dad 7

UINavigationController有一个delegate发出委托回调的属性.请在此处查看iOS参考.

代理没有"后退按钮"回调,而是告诉您什么东西将出现在导航堆栈上.当您按下时,您将顶部视图控制器"弹出"到堆栈中,因此它将告诉您视图即将出现.我认为这是你要寻找的回调.

您可以使用一些简单的逻辑来检查它是否是"感兴趣"的视图控制器,然后您可以发送通知,等等.


der*_*iuk 5

为了完整起见,混合两种最upvoted答案(的12中SWIFT):

override func willMoveToParentViewController(parent: UIViewController?) {
    super.willMoveToParentViewController(parent)
    if parent == nil {
        // view controller is popping
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 不要使用`will`,请使用`did`,因为有屏幕边缘弹出手势。 (2认同)

And*_*rew -11

要确保您确定这是后退按钮,唯一的方法是创建一个自定义按钮。如果您不知道如何操作,请查看本教程。它看起来不像普通的后退按钮,但很接近。如果您需要更多帮助,请发表评论

  • 该答案不正确,应由发布者删除。 (14认同)