我有一个“主要”故事板,在这个故事板里面我有一个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?
答案 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。