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

时间:2015-10-29 20:46:04

标签: ios objective-c uinavigationcontroller pushviewcontroller popviewcontroller

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

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

    [VC1.navigationController pushViewController: animated:YES];

    1. 通过调用来从VC1呈现另一个视图控制器VC3。

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

    2. 现在当我从VC2来到VC1时,我正在呼叫

      [VC2.navigationController popViewControllerAnimated:YES];

      从VC3到VC1我正在调用

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

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

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

1 个答案:

答案 0 :(得分:1)

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

使用块看起来像

exec

您可以将此块设置为此类

@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];

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