我有一个视图控制器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中。
最好的方法是让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返回的任何逻辑关联在完成处理程序中