1

无论如何确定当前是否正在显示模态视图控制器?目前正在查看?

我有一个问题,viewDidAppear 被调用了两次,只需要调用一次,为了解决我想看看一个模态视图控制器是否在屏幕上,如果它运行一点代码,否则什么都没有。

如果我可以在导航堆栈上的当前视图控制器内进行编码,并查看当前是否有模态视图控制器在其之上,那将会很有用?

4

4 回答 4

0

如果 " viewDidAppear" 被调用两次,可能是您两次实例化(创建)您的视图。

在“”中设置断点viewDidAppear并查看回溯以查看您的新视图控制器是通过编程方式(在代码中)创建还是在您的 XIB 或 Storyboard 中实例化。

你只需要创建一次,如果你只创建一次,“ viewDidAppear”只会被调用一次。

于 2013-01-13T01:42:07.163 回答
0

检查模态 viewController 的健康状况的正确位置是在呈现 viewController。呈现的 viewController 应该知道它呈现的 viewController 是否仍然存在,或者已经被解除(它负责这两个任务)。presentingViewController 有一个属性,presentedViewController它携带你需要的引用。

如果模态 VC 已被掩盖,例如通过其自身推送另一个 viewController,您将能够从它的 navController.viewControllers 数组属性中确定:再次,最佳参考源返回到呈现的 viewController。

如果你不能从它呈现的 viewController 中获得对模态 viewController 的引用,那么你的设计可能有问题,你需要重新考虑。

于 2013-01-13T01:46:46.723 回答
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
    }
}
于 2013-01-13T02:02:47.817 回答
0

我认为您可以使用 PresendedViewController 属性。早期版本是modalViewController。

于 2013-09-17T15:10:20.223 回答