在我的模型類我想顯示警報時,壞事發生(例如,服務器發送一個錯誤)。但是,我不想打擾代表或KVO。在主應用程序窗口中顯示警報控制器?
有沒有一種簡單的方法,以示對「主」窗口中的警報,放置上述別人的看法?
目前我使用此代碼(不工作,如果擺放出來的viewController類):
[self presentViewController:vc animated:YES completion:^{
在我的模型類我想顯示警報時,壞事發生(例如,服務器發送一個錯誤)。但是,我不想打擾代表或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和頂視圖控制器顯示它可以幫助 –