iOS:如何检测viewcontroller是否在弹出或关闭后出现



我有一个视图控制器VC1,我正在对它执行以下两个操作:

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

[VC1.navigationController pushViewController: animated:YES];

  1. 通过调用从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中。

最好的方法是让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返回的任何逻辑关联在完成处理程序中

相关内容

  • 没有找到相关文章

最新更新