如何检测 iOS 中弹出了哪个子视图控制器?

How to detect which child view controller was popped up in iOS?

我让视图控制器说 A 我要从 AB。然后在 B 上,按后退按钮我将进入 A。现在我想知道我从哪个视图控制器进入 back.Please 告诉我该怎么做 this.I 知道我可以使用 viewWillAppear 方法做到这一点,但不想使用它。

请告诉我哪种方法最好?

-(void)viewWillAppear:(BOOL)animated
{
    NSLog(@"view will appear called");
}

你已经被push到B-VC从A-VC right.You可以pop回来

self.navigationController!.popViewControllerAnimated(true)--把这段代码写在B-VC

VC-ViewController。

你可以在pop之前传递controller的id
A.h
@property NSInteger childVC;
A.m

-(void)viewWillAppear:(BOOL)animated
{
    if (_childVC == 3){
        //todo
    }
}

B.m

-(void) viewWillDisappear:(BOOL)animated {
    A *parent = (A *)self.navigationController.viewControllers[self.navigationController.viewControllers.count - 2];
    parent.childVC = 3;
    [super viewWillDisappear:animated];
}

我没有看到其他方式

您可以使用导航控制器委托并实现以下 UINavigationControllerDelegate 方法:


- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    UIViewController *fromViewController = [navigationController.transitionCoordinator viewControllerForKey:UITransitionContextFromViewControllerKey];
    NSLog(@"%@", fromViewController.title);
}
- (id <UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                                   animationControllerForOperation:(UINavigationControllerOperation)operation
                                                fromViewController:(UIViewController *)fromVC
                                                  toViewController:(UIViewController *)toVC
{
    NSLog(@"from VC class %@", [fromVC class]);
    if ([fromVC isKindOfClass:[ControllerYouJustPopped class]])
    {
        NSLog(@"Returning from popped controller");

    }

    return nil;
}

这真的救了我。