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

时间:2015-10-29 12:05:19

标签: ios objective-c iphone ipad uinavigationcontroller

我有视图控制器说 A 我将从 A 转到 B 。然后按 B 按后退按钮我要来 A 。现在我想知道我将从哪个视图控制器回来。请告诉我我该怎么做。我知道我可以使用{{1}方法但不想使用它。

请告诉我哪种方法最好?

viewWillAppear

4 个答案:

答案 0 :(得分:1)

你已经从A-VC向B-VC推进了。你可以通过弹出来回来。

self.navigationController!.popViewControllerAnimated(true) - 在B-VC中编写此代码

VC视图控制器。

答案 1 :(得分:1)

- (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;
}

这真的救了我。

答案 2 :(得分:0)

你可以在弹出之前传递控制器的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];
}

我没有看到其他方式

答案 3 :(得分:-1)

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


- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    UIViewController *fromViewController = [navigationController.transitionCoordinator viewControllerForKey:UITransitionContextFromViewControllerKey];
    NSLog(@"%@", fromViewController.title);
}