首页 文章

iOS:如何检测popcon或dismiss后是否出现viewcontroller

提问于
浏览
1

我有一个视图控制器VC1,我正在做两个操作:

  • 通过调用从VC1的导航控制器推送另一个视图控制器VC2

[VC1.navigationController pushViewController: animated:YES];

  • 通过调用从VC1呈现另一个视图控制器VC3

*UINavigationController navController = [[UINavigationController alloc] initWithRootViewController:VC3]; [VC1 presentViewController:navController animated:YES completion:nil];

现在,当我从VC2来到VC1时,我正在打电话

[VC2.navigationController popViewControllerAnimated:YES];

从VC3到VC1我正在打电话

[VC3.navigationController dismissViewControllerAnimated:YES completion:nil];

我的问题是,当我回到VC1时,我怎么知道我是来自VC2(通过解雇)还是VC3(通过弹出)?

注意:VC1作为子视图控制器加载到父视图控制器VC4中 .

1 回答

  • 1

    最好的方法是让childViewController回调给呈现视图控制器 . 通过这样做,childViewController将不需要知道它是以模态方式呈现还是在导航堆栈等中的实现细节 .

    使用块它看起来像

    @interface VC2 : UIViewController
    
    @property (nonatomic, copy) void (^completion)(VC2 *viewController);
    
    @end
    

    你可以设置这个块这样的东西

    VC2 *viewController = VC2.new;
    viewController.completion = ^(VC2 *viewController) {
      [viewController.navigationController popViewControllerAnimated:YES];
    };
    
    [VC1.navigationController pushViewController:viewController animated:YES];
    

    现在你以前在哪里打电话

    [VC2.navigationController popViewControllerAnimated:YES];
    

    你改为打电话

    self.completion(self);
    

    您将要关联的任何逻辑从完成处理程序内的特定viewController返回

相关问题