在主应用程序窗口中显示警报控制器

时间:2016-12-29 13:56:14

标签: ios objective-c

在我的模型类中,我希望在发生不良事件时显示警报(例如,服务器发送错误)。但是,我不想打扰代表或KVO。

是否有一种简单的方法可以显示" main"窗口,将视图置于其他人之上?

目前我使用此代码(如果放在viewController类之外,则不起作用):

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];
            });
        }];

显然,没有视图的课程无法使用:

    [self presentViewController:vc animated:YES completion:^{

2 个答案:

答案 0 :(得分:1)

您需要显示UIAlertController中的UIViewController。如果您需要主视图控制器,则需要从应用程序代理的窗口rootViewController执行此操作。

一种讨厌的方法是引用UIApplication.sharedApplication().delegate.window.rootViewController

更好的方法是发布模型方法的通知并在App Delegate

中监听

理想情况下,您应该考虑将模型方法中的错误传递给调用视图控制器。

或许您可以将当前视图控制器作为参数传递给模型方法

答案 1 :(得分:1)

根据@Ashley Mills的解决方案您可以使用此方法找到顶视图控制器

- (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方法

的返回对象中显示警告