无论如何确定当前是否正在显示模态视图控制器?目前正在观看?
我有一个问题,其中一个viewDidAppear被调用两次,只需要调用一次,为了解决我想看看模块视图控制器是否在屏幕上,如果它运行一点代码,否则什么都没有。
如果我可以在导航堆栈上的当前视图控制器内编码,并且看看当前是否有模态视图控制器在它之上,那将会很有用吗?
答案 0 :(得分:0)
如果两次调用“viewDidAppear
”,则可能是您要两次实例化(创建)视图。
在“viewDidAppear
”中设置断点并查看回溯以查看是以编程方式(在代码中)创建新视图控制器还是在XIB或Storyboard中实例化。
您只需要创建一次,如果只创建一次,“viewDidAppear
”将只调用一次。
答案 1 :(得分:0)
检查模态viewController的健康状况的正确位置是在它中呈现viewController。呈现viewController应该知道它呈现的viewController是否仍然存在,或者是否被解雇(它负责这两个任务)。 presentsViewController有一个属性presentedViewController
,它带有你需要的引用。
如果已经掩盖了模态VC,例如通过自己推送另一个viewController,您将能够从它的navController.viewControllers数组属性中确定:再次,最好的参考源可以追溯到呈现的viewController。
如果你不能从它呈现的viewController中获得对模态viewController的引用,那么你的设计可能有问题,你需要重新思考。
答案 2 :(得分:0)
如果你想要viewDidAppear
中的某些东西执行一次,有很多方法可以做到,但这里有一个。首先,定义类属性:
@property (nonatomic) BOOL alreadyRun;
然后在viewDidAppear
中,检查该属性:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (!self.alreadyRun)
{
self.alreadyRun = YES;
// do whatever you need to have done once per instance of this VC
}
}
答案 3 :(得分:0)
我认为您可以使用PresendedViewController属性。早期版本是modalViewController。