无论如何确定当前是否正在显示模态视图控制器?目前正在查看?
我有一个问题,viewDidAppear 被调用了两次,只需要调用一次,为了解决我想看看一个模态视图控制器是否在屏幕上,如果它运行一点代码,否则什么都没有。
如果我可以在导航堆栈上的当前视图控制器内进行编码,并查看当前是否有模态视图控制器在其之上,那将会很有用?
无论如何确定当前是否正在显示模态视图控制器?目前正在查看?
我有一个问题,viewDidAppear 被调用了两次,只需要调用一次,为了解决我想看看一个模态视图控制器是否在屏幕上,如果它运行一点代码,否则什么都没有。
如果我可以在导航堆栈上的当前视图控制器内进行编码,并查看当前是否有模态视图控制器在其之上,那将会很有用?
如果 " viewDidAppear
" 被调用两次,可能是您两次实例化(创建)您的视图。
在“”中设置断点viewDidAppear
并查看回溯以查看您的新视图控制器是通过编程方式(在代码中)创建还是在您的 XIB 或 Storyboard 中实例化。
你只需要创建一次,如果你只创建一次,“ viewDidAppear
”只会被调用一次。
检查模态 viewController 的健康状况的正确位置是在呈现 viewController。呈现的 viewController 应该知道它呈现的 viewController 是否仍然存在,或者已经被解除(它负责这两个任务)。presentingViewController 有一个属性,presentedViewController
它携带你需要的引用。
如果模态 VC 已被掩盖,例如通过其自身推送另一个 viewController,您将能够从它的 navController.viewControllers 数组属性中确定:再次,最佳参考源返回到呈现的 viewController。
如果你不能从它呈现的 viewController 中获得对模态 viewController 的引用,那么你的设计可能有问题,你需要重新考虑。
如果你想让某些东西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
}
}
我认为您可以使用 PresendedViewController 属性。早期版本是modalViewController。