11

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

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

我想做什么(随时提出更好的替代方法):

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

3 回答 3

14

获取rootViewController.presentedViewController(在 iOS 5.0+ 中可用)或rootViewController.modalViewController(在 iOS 2.0+ 中可用)并查看它是否为 nil。

此外,您不想从辅助线程呈现第二个视图控制器,所有 UI工作必须在主线程上完成。

于 2012-05-19T15:51:42.837 回答
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);
        }
    }
于 2016-12-01T09:58:17.040 回答
0

我很想做一些更具确定性的事情。有一段代码负责执行两种模式显示,并让它跟踪第一个模式出现和消失的时间,这样,如果它收到一条显示第二个模式的消息,它知道是要这样做还是只是设置一个“待定” “ 旗帜。当它被告知第一个已被解雇时,它可以检查第二个是否未决。

于 2012-05-19T15:49:37.690 回答