确定是否显示模态视图控制器

时间:2013-01-13 01:22:54

标签: ios uiviewcontroller modalviewcontroller viewcontroller

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

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

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

4 个答案:

答案 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。

相关问题