10419


今までUIAlertViewを使用していたのですが、  
これをUIAlertControllerに一律置き換えています。

そこで、AppDelegate上にあるAlertViewを  
どのように置き換えるかという点について教えてください。  
（ViewControllerではないので、presentViewControllerができずにいます）


CC BY-SA 3.0
2015-05-19T07:12:45.293
10361
2015-05-20T10:39:42.257
9791
question
ios objective-c ios8
[Objective-C]AppDelegateにて、UIAlertControllerを表示させる方法


AppDelegateクラスは、テンプレートから変更していなければ、`window`というプロパティがあります。それを前提にし、Alert
Controllerのインスタンス名を`alertController`とすると、

[code]

    [self.window.rootViewController presentViewController: alertController animated: YES completion: NULL];
    
[/code]

ただし、`self.window.rootViewController`が、現在画面に表示されているView
Controllerでないかもしれないので、そこは注意が必要でしょう。


CC BY-SA 3.0
2015-05-19T08:51:27.693
10364
2015-05-19T08:51:27.693
7362
10361
answer


以前qiitaへ投稿した記事からの抜粋です。  
<http://qiita.com/takabosoft/items/162b6d90e00b79a7e328>

どこから呼び出しても（各種モーダルビューが出ていても）大丈夫なように作ったつもりです。

[code]

    // 警告を表示します。OKボタンタップで閉じます。
    void Warning(NSString *message) {
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"" message:message preferredStyle:UIAlertControllerStyleAlert];
    [alert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]];
    
        // 親ビューコンをなんとか検索
        UIViewController *baseView = [UIApplication sharedApplication].keyWindow.rootViewController;
    while (baseView.presentedViewController != nil && !baseView.presentedViewController.isBeingDismissed) {
        baseView = baseView.presentedViewController;
        }
        [baseView presentViewController:alert animated:YES completion:nil];
    }
    
[/code]

ご参考まで。


CC BY-SA 3.0
2015-05-20T10:39:42.257
10419
2015-05-20T10:39:42.257
5605
10361
answer