2017-05-16 6 views
2

さらに多くのページにUIAlertControllerが表示されます。iOS show alertコントローラオブジェクト

アラートコードをメソッドとクラスに1ページで書き込む必要があります。

クラスを使用して、どのViewControllerでもアラートを表示できるメソッドを呼び出す必要があります。

クラスにpresentviewcontrollerを書き込むにはどうすればよいですか?

私のヘッダファイルは以下の通りです:ファイルを実装マイ

#import <Foundation/Foundation.h> 
#import "VisionAPI.h" 

@interface VisionAPI : NSObject 

+(void) showMessageAlert:(NSString *) title andMessage:(NSString*) msg andDoneMsg:(NSString*) done; 

@end 

は以下の通りです:

[self presentViewController:showMsgAlertController animated:YES completion:nil]; 

どのように行うことができます

#import "VisionAPI.h" 
#import <UIKit/UIKit.h> 
@implementation VisionAPI 

+(void) showMessageAlert:(NSString *) title andMessage:(NSString*) msg andDoneMsg:(NSString*) done{ 

    UIAlertController *showMsgAlertController = [UIAlertController alertControllerWithTitle: title message: msg preferredStyle: UIAlertControllerStyleAlert]; 
UIAlertAction *showMsgAlertControllerOkAction = [UIAlertAction actionWithTitle:done style:UIAlertActionStyleDefault 
                 handler:nil]; 
     [showMsgAlertController addAction:showMsgAlertControllerOkAction]; 
dispatch_async(dispatch_get_main_queue(), ^{ 

     [self presentViewController:showMsgAlertController animated:YES completion:nil]; 
    }); 
} 
@end 

しかし、上のコードは、この行でエラーが表示されますNSObjectのpresentViewController、または問題の解決方法

ありがとうございました。

+1

あなたがalertviewcontroller提示するビューコントローラが必要です。 @Krunalが以下に示唆するように –

答えて

0

はあなたの関数のパラメータの引数としてビューコントローラを追加し、 「自己」 コントローラを表示し、そこから(ビューコントローラのインスタンス/オブジェクト)を渡し、あなたの警告制御機構を提示したいです。あなたはこの関数のパラメータ引数毎時間としてビューコントローラを渡したくない場合にも、アプリケーションのルートビューコントローラを使用することができます

+(void) showMessageAlert:(NSString *) title andMessage:(NSString*) msg andDoneMsg:(NSString*) done fromViewController: (UIViewController)viewController{ 

    UIAlertController *showMsgAlertController = [UIAlertController alertControllerWithTitle: title message: msg preferredStyle: UIAlertControllerStyleAlert]; 
UIAlertAction *showMsgAlertControllerOkAction = [UIAlertAction actionWithTitle:done style:UIAlertActionStyleDefault 
                 handler:nil]; 
     [showMsgAlertController addAction:showMsgAlertControllerOkAction]; 
dispatch_async(dispatch_get_main_queue(), ^{ 

     [viewController presentViewController:showMsgAlertController animated:YES completion:nil]; 
    }); 
} 
@end 

。次のように:以下に示すように

+(void) showMessageAlert:(NSString *) title andMessage:(NSString*) msg andDoneMsg:(NSString*) done{ 

     UIAlertController *showMsgAlertController = [UIAlertController alertControllerWithTitle: title message: msg preferredStyle: UIAlertControllerStyleAlert]; 
    UIAlertAction *showMsgAlertControllerOkAction = [UIAlertAction actionWithTitle:done style:UIAlertActionStyleDefault 
                  handler:nil]; 
      [showMsgAlertController addAction:showMsgAlertControllerOkAction]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 

RootViewController *rootController = (RootViewController*)[[(AppDelegate*) 
            [[UIApplication sharedApplication]delegate] window] rootViewController]; 

      [rootController presentViewController:showMsgAlertController animated:YES completion:nil]; 
     }); 
    } 
    @end 
0

あなたはNSObjectの中で最上位のビューコントローラを取得することができます。

- (UIViewController*)topMostController 
     { 
      UIViewController *topController = [self rootViewController]; 

      while ([topController presentedViewController]) topController = [topController presentedViewController]; 

      // Returning topMost ViewController 
      return topController; 
     } 


+(void) showMessageAlert:(NSString *) title andMessage:(NSString*) msg andDoneMsg:(NSString*) done{ 

     UIAlertController *showMsgAlertController = [UIAlertController alertControllerWithTitle: title message: msg preferredStyle: UIAlertControllerStyleAlert]; 
    UIAlertAction *showMsgAlertControllerOkAction = [UIAlertAction actionWithTitle:done style:UIAlertActionStyleDefault 
                  handler:nil]; 
      [showMsgAlertController addAction:showMsgAlertControllerOkAction]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 

      [[self topMostController] presentViewController:showMsgAlertController animated:YES completion:nil]; 
     }); 
    } 
関連する問題