如何检查模式视图当前是否在我的self.window.rootViewController上?

时间:2012-05-19 15:31:48

标签: ios cocoa-touch uiviewcontroller

我需要检查根视图控制器上是否还有模态视图。 我面临的问题是我有一个第二个模态视图来自某个需要显示的线程。我想延迟第二个模态视图,直到第一个模态视图消失。 我不能在第一个被解雇后启动它,因为第二个模态视图是有条件的。

[self.window.rootViewController presentModalViewController:vc animated:YES];

我想做什么(随意建议更好的替代方式):

  1. 检查self.window.rootViewController当前是否有顶部显示的模态视图(或仍然是动画模式视图)。
  2. 使用performSelector:afterDelay:0.1
  3. 再次检查,如果需要,再次延迟

3 个答案:

答案 0 :(得分:13)

获取rootViewController.presentedViewController(适用于iOS 5.0+)或rootViewController.modalViewController(适用于iOS 2.0+),看看它是否为零。

此外,您想要从辅助线程中呈现第二个视图控制器,所有UI内容在主线程上完成。

答案 1 :(得分:1)

我也遇到过这种问题。我想从推送中弹出一个模态,在我这样做之前,我想检查是否已经显示某个屏幕,如果是,则忽略这些并弹出我的屏幕下面是代码。

    // Dismiss all the modals which are currently shown.
    - (void) dismissAllModalsIfAnyWithCompletion:(void(^)(BOOL success)) completion{

            BOOL hiddenByModal = nil != [[UIApplication sharedApplication].keyWindow.rootViewController presentedViewController];
        if (hiddenByModal) {
//We need to dismiss the existing modal and after completion pop up the new modal.
            [[UIApplication sharedApplication].keyWindow.rootViewController dismissViewControllerAnimated:NO completion:^{
                // After dismissing let the handler know.
                completion(YES);
            }];
        }
        else{
// If there is no modal, then simply let the handler know to pop the new modal.
            completion(YES);
        }
    }

答案 2 :(得分:0)

我很想做一些更确定的事情。有一段代码负责同时进行模态显示并让它跟踪第一个模态何时出现并消失,这样,如果它收到显示第二个模式的消息,它就会知道是做它还是只是设置“待定” “国旗。当被告知第一个被解雇时,它可以检查第二个是否有待处理。