我有一个视图控制器VC1,我正在做两个操作:
[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中作为子视图控制器加载。
答案 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返回