2016-12-29 110 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

感謝您的回答 –

相關問題