2016-12-29 8 views
0

私のモデルクラスでは、何か悪いことが起こったときに警告を表示したい(たとえば、サーバーがエラーを送信する)。しかし、私はデリゲートやKVOを気にしたくない。メインのアプリケーションウィンドウにアラートコントローラがありますか?

「メイン」ウィンドウに対して警告を表示し、他のものより上に表示する簡単な方法はありますか?

現在、私は(の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:^{ 
+0

なぜあなたはデリゲートかKVOを気にしたくないですか? –

+0

@MikeAlterエフェクトは同じですが、より多くの作業が可能になります。 –

+0

1つの解決策が気に入らなければ、appellegateの方法を見せて、トップビューコントローラから表示することができます –

答えて

1

にパラメータとして現在のビューコントローラに渡すことができますが、この方法

- (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があり、detail viewControllerがモーダル(またはそのような複雑なケース)を表示した場合はどうなりますか?これはまだ成立しますか? – SAHM

+0

@SAHMその場合、私はこのメソッドをテストしませんでした。あなたがこの回答に何らかの改善がある場合は、提案するか、EDIT –

1

あなたが必要UIViewControllerからUIAlertControllerを提示する。メインビューコントローラが必要な場合は、アプリケーションデリゲートのウィンドウのrootViewControllerからこれを行う必要があります。これを行うには

厄介な方法は、より良い方法は、あなたが探している必要がありかかわらず、理想的にはアプリケーションの委任に

をモデルメソッドから通知を掲載し、それを聞くことであろうUIApplication.sharedApplication().delegate.window.rootViewController

を参照することですモデルメソッドから呼び出し側のView Controllerにエラーを返すときに発生します。

それとも、あなたが@Ashleyミルズのソリューションごとにモデル法

+0

ありがとう、どのようにrootViewControllerでそれを実装するには? –

+0

答えを –

+1

答えてくれてありがとう –

関連する問題