在不同的UIWindow上呈现视图控制器

时间:2014-05-16 16:11:40

标签: ios objective-c uiwindow

我需要帮助解决这个问题,我已经有两天了。假设我有一个处理图像幻灯片的自定义视图控制器,它可以用于嵌入视图或通过导航控制器或模态视图显示。它还具有全屏选项,可以使用此代码打开

        _fullScreenWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        _fullScreenWindow.backgroundColor = [UIColor blackColor];
        _fullScreenWindow.windowLevel = UIWindowLevelNormal;             
        _fullScreenWindow.rootViewController = self;            
        [_fullScreenWindow makeKeyAndVisible];

我预先存储了原始窗口,因此我可以在退出全屏时恢复其状态。这也调用了方向方法,当它在导航控制器中时不会被调用。因此,在全屏模式状态下,有一个选项可以显示为uitableviewcontroller,所以理论上我可以使用此代码来呈现它。

    UITableViewController *mediaOptionsController = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:mediaOptionsController];
    [navController setModalPresentationStyle:UIModalPresentationFormSheet];
    navController.navigationBar.topItem.leftBarButtonItem = dismissButton;
    //mainViewController is the custom view controller, which is on different uiwindow
    [mainViewController  presentViewController:navController animated:YES completion:nil];

但是每当我使用此选项而无法呈现时,我都会收到此警告

  

警告:尝试在视图不在窗口层次结构中的UINavigationController上呈现UINavigationController!

知道为什么它不起作用?只是因为你知道在app委托上设置根控制器是不可行的,因为我直接进入根控制器的视图而不是导航控制器的当前顶视图

1 个答案:

答案 0 :(得分:0)

不是真正的解决方案,但我解决了这个问题,解雇了第二个窗口并使主窗口键,然后从那里显示选项。只有退出选项,我才能再次制作第二个窗口键。