在主应用程序窗口中显示警报控制器?
在我的模型类我想显示警报时,坏事发生(例如,服务器发送一个错误)。但是,我不想打扰代表或KVO。在主应用程序窗口中显示警报控制器?
有没有一种简单的方法,以示对“主”窗口中的警报,放置上述别人的看法?
目前我使用此代码(不工作,如果摆放出来的viewController类):
[self presentViewController:vc animated:YES completion:^{
按@Ashley米尔斯的解决方案,可以看到顶视图控制器,用这种方法
- (UIViewController *)currentTopViewController
{
UIViewController *topVC = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
while (topVC.presentedViewController)
{
topVC = topVC.presentedViewController;
}
if ([topVC isKindOfClass:[UINavigationController class]]) {
return [(UINavigationController *)topVC topViewController];
}
return topVC;
}
告诉你警报在currentTopViewController
方法
如果在容器中有一个UISplitViewController,并且详细视图控制器提供了一个模式(或其他复杂的案例),该怎么办。这仍然适用? – SAHM
@SAHM对于这种情况我没有测试这个方法,如果你有这个答案有些改进,欢迎您提出或编辑 –
您需要:没有一个视图不能使用
UIAlertController *vc = [UIAlertController alertControllerWithTitle:@"Произошла ошибка"
message:response
preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:vc animated:YES completion:^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[vc dismissViewControllerAnimated:YES completion:nil];
});
}];
显然,类从UIViewController
提供UIAlertController
。如果你想在主视图控制器,你需要从应用程序委托的窗口rootViewController
做到这一点。
一个讨厌的方式做,这是指UIApplication.sharedApplication().delegate.window.rootViewController
一个更好的办法是从你的模型方法发布的通知,听它在App代表
理想的情况下,虽然你应该寻找将模型方法中的错误传回给调用视图控制器。
或者,也许你可以在当前视图控制器作为参数传递给模型方法
谢谢,如何使用rootViewController实现它? –
更新了答案 –
感谢您的回答 –
为什么你不想与委托或志愿打扰的返回对象。 –
@MikeAlter效应将是相同的,但更多的工作。 –
一个解决办法是把警报显示方法的appdelegate和顶视图控制器显示它可以帮助 –