全屏模态视图控制器显示在表单表下方。

6
在根视图控制器中,我正在以全屏显示模态视图控制器。这在大多数情况下都可以正常工作。问题出现在另一个以表单方式打开的模态视图控制器也存在时。这种情况下,我的全屏VC会被显示在表单视图控制器的后面。我该怎么办?
基本上,这个“DemoViewController”在我的应用程序中作为屏幕保护程序运行。
demoVideoController = new DemoVideoController(this) { View = { Frame = View.Bounds } };
demoVideoController.ModalPresentationStyle = UIModalPresentationStyle.FullScreen;
PresentViewController(demoVideoController, false, null);

有什么想法吗?

我假设您想关闭表单工作表。可能有一些关于表单工作表的固有特性,使它们始终处于顶部,因为它们还显示它们后面的视图。 - valheru
@valheru 我宁愿不关闭它... - Chris Kooken
PresentViewController 不是苹果的方法。实际上,它不是一个方法,而是一个函数,而且不以 UI 开头,因此肯定是自定义代码。 - Rivera
@Rivera 这是一个关于UIViewController的苹果方法... https://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/presentViewController:animated:completion: - Chris Kooken
presentViewController:animated:completion: 是苹果的一个方法,而 PresentViewController() 不是一个方法(看起来像一个函数),也没有在 UIViewController 中定义。 - Rivera
显示剩余3条评论
4个回答

3

您可以在应用程序中创建一个新的UIWindow来呈现您的屏幕保护器视图,并将其置于所有其他窗口之上。例如,像这样(假设您有一个名为screenSaverWindow的UIWindow属性)。

- (void)screenSaver
{
    UIView *view = [[UIView alloc] initWithFrame:self.view.bounds];
    view.backgroundColor = [UIColor blueColor];
    self.screenSaverWindow = [[UIWindow alloc] initWithFrame:self.view.bounds];
    self.screenSaverWindow.windowLevel = UIWindowLevelAlert + 1;
    [self.screenSaverWindow addSubview:view];
    [self.screenSaverWindow makeKeyAndVisible];

}

1

尝试在呈现后将视图置于前台。在presentViewController:animated:completion:的完成块中,尝试调用:

[self.view bringSubviewToFront: demoVideoController.view];

1

确保您顶层的viewControllernavigationController是呈现您的demoViewController(您的屏幕保护程序)的那个。

有关此主题的更多帮助,请参阅下面的链接:

iPhone - 如何找到最顶层的视图控制器


1
我的猜测是模型和表单控制器由不同的控制器呈现。
尝试从同一个控制器中呈现所有内容,如window.rootController
这样,您可以测试是否已经有一个presentedViewController,并在呈现您的模态视图之前将其关闭。

它们都是从同一个视图控制器中呈现的。 - Chris Kooken
在呈现新视图控制器之前,请先检查presentedViewController - Rivera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接