2016-12-29 73 views
0

在我的模型类我想显示警报时,坏事发生(例如,服务器发送一个错误)。但是,我不想打扰代表或KVO。在主应用程序窗口中显示警报控制器?

有没有一种简单的方法,以示对“主”窗口中的警报,放置上述别人的看法?

目前我使用此代码(不工作,如果摆放出来的viewController类):

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

为什么你不想与委托或志愿打扰的返回对象。 –

+0

@MikeAlter效应将是相同的,但更多的工作。 –

+0

一个解决办法是把警报显示方法的appdelegate和顶视图控制器显示它可以帮助 –

回答

1

按@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方法

+0

如果在容器中有一个UISplitViewController,并且详细视图控制器提供了一个模式(或其他复杂的案例),该怎么办。这仍然适用? – SAHM

+0

@SAHM对于这种情况我没有测试这个方法,如果你有这个答案有些改进,欢迎您提出或编辑 –

1

您需要:没有一个视图不能使用

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代表

理想的情况下,虽然你应该寻找将模型方法中的错误传回给调用视图控制器。

或者,也许你可以在当前视图控制器作为参数传递给模型方法

+0

谢谢,如何使用rootViewController实现它? –

+0

更新了答案 –

+1

感谢您的回答 –

相关问题