【问题标题】:How to detect which child view controller was popped up in iOS?如何检测 iOS 中弹出了哪个子视图控制器?
【发布时间】:2016-01-29 13:36:49
【问题描述】:

我有视图控制器说 A 我要从 AB。然后按 B后退按钮我来到 A。现在我想知道我从哪个视图控制器回来。请告诉我我该怎么做。我知道我可以使用viewWillAppear 方法来做到这一点但不想用这个。

请说出最好的方法是什么?

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

【问题讨论】:

    标签: ios objective-c iphone ipad uinavigationcontroller


    【解决方案1】:

    你已经从A-VC正确推送到B-VC了。你可以通过popping回来。

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

    VC-ViewController。

    【讨论】:

    【解决方案2】:
    - (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;
    }
    

    这真的救了我。

    【讨论】:

    • 最佳答案!一个 Swift 例子会很好!
    【解决方案3】:

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

    我没有看到其他方法

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 它返回当前视图控制器的名称。
      • 你是对的。我用一些额外的代码更新了我的答案。 “fromViewController”可以通过导航控制器transitionCoordinator访问。
      • 您是否为 viewController 分配了标题?
      • 是仍然返回空值
      猜你喜欢
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 2019-06-09
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 2014-09-06
      相关资源
      最近更新 更多