UIStoryboard Reference 和根视图控制器
UIStoryboard Reference and root view controller
我有一个 "Main" 情节提要,在这个情节提要中我有一个链接到另一个情节提要 "Login" 的情节提要参考实体。我注意到当我尝试使用以下内容访问当前屏幕上的视图时:
[[[[UIApplication sharedApplication]delegate]window]rootViewController]
它返回 "Main" 故事板上的视图,但如果我尝试在此视图上推送 UIAlertController,我会收到以下错误:
Warning: Attempt to present <UIAlertController: 0x1839a000> on <ViewController: 0x17633ad0> whose view is not in the window hierarchy!
有什么原因我不能将此视图推到顶部,如果不是,我如何从 "Login" 情节提要中获取当前显示的实际 uiviewcontroller?
如果您从 viewDidload
中呈现 UIAlertController
那么它可能会像这样发生,因为当时加载视图时它不在 windows 层次结构中,直到它完全加载。
第二件事你必须在最顶层的视图控制器上呈现 UIAlertController
,例如,
[self presentViewController......];
不在 windows rootViewController 上。所以,这取决于你是怎么做的。
请使用这个
-(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来呈现ViewController。
我有一个 "Main" 情节提要,在这个情节提要中我有一个链接到另一个情节提要 "Login" 的情节提要参考实体。我注意到当我尝试使用以下内容访问当前屏幕上的视图时:
[[[[UIApplication sharedApplication]delegate]window]rootViewController]
它返回 "Main" 故事板上的视图,但如果我尝试在此视图上推送 UIAlertController,我会收到以下错误:
Warning: Attempt to present <UIAlertController: 0x1839a000> on <ViewController: 0x17633ad0> whose view is not in the window hierarchy!
有什么原因我不能将此视图推到顶部,如果不是,我如何从 "Login" 情节提要中获取当前显示的实际 uiviewcontroller?
如果您从 viewDidload
中呈现 UIAlertController
那么它可能会像这样发生,因为当时加载视图时它不在 windows 层次结构中,直到它完全加载。
第二件事你必须在最顶层的视图控制器上呈现 UIAlertController
,例如,
[self presentViewController......];
不在 windows rootViewController 上。所以,这取决于你是怎么做的。
请使用这个
-(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来呈现ViewController。