UIStoryboard参考和根视图控制器

时间:2016-09-05 09:28:25

标签: ios objective-c uiviewcontroller uistoryboard uistoryboardsegue

我有一个“主要”故事板,在这个故事板里面我有一个Storyboard参考实体,链接到另一个故事板“登录”。我注意到当我尝试使用以下内容访问当前屏幕上的视图时:

[[[[UIApplication sharedApplication]delegate]window]rootViewController]

它将返回“主要”故事板上的视图,但如果我尝试在此视图上推送UIAlertController,则会出现以下错误:

Warning: Attempt to present <UIAlertController: 0x1839a000> on <ViewController: 0x17633ad0> whose view is not in the window hierarchy!

有没有理由我无法将此视图置于顶部,如果不是如何从“登录”故事板中获取当前正在显示的实际uiviewcontroller?

2 个答案:

答案 0 :(得分:0)

如果您在UIAlertController中展示viewDidload,则可能会发生这样的情况,因为当视图加载时,它在Windows层次结构中才会完全加载。

第二件事你必须在最顶层的视图控制器上显示UIAlertController

 [self presentViewController......];

不在Windows rootViewController上。所以,这取决于你是怎么做的。

答案 1 :(得分:0)

使用此

 -(id)getTopViewController{


               UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;

                while (topController.presentedViewController) {
                    topController = topController.presentedViewController;
                }
                if (![topController isKindOfClass:[NSNull class]]) {

                    return topController;
                }



        }

像这样使用这个方法

 UIViewController *viewOb = [self getTopViewController];

viewOb 用于presentViewController。