2

ユーザーに要求するパスワード UIAlertView があります。シナリオに応じて、downloadViewController (ユーザーがデータをダウンロードした後)、データに切り替えるとき (ユーザーが複数のアカウントを持っている場合、アカウントごとにパスワードがあります)、およびアプリが(アプリ デリゲートから) スリープから復帰します。

基本的にデータベースのパスワードなどをチェックする共通の UIAlertView コードがあります。この共通コードを配置するのに適した場所はありますか? アラートの表示とこのアラートのデリゲート メソッドをコピー アンド ペーストしているように感じます。ただし、特定のビュー コントローラーでは他のアラートも発生するため、その特定の ViewController の UIAlertViewDelegate を介してそれらに応答する必要があります。

4

1 に答える 1

1

次のようなカテゴリを作成して、コードを再利用できます。

*.h ファイル

@interface UIViewController(Transitions)

- (void) showAlertWithDelegate: (id) delegate;

@end

*.m ファイル

-(void) showAlertWithDelegate:(id)delegate {

    id _delegate = ( delegate == nil) ? self : delegate;
    UIAlertView *alert = [[UIAlertView alloc]
                          initWithTitle: NSLocalizedString(@"Alert Text",@"Alert Text")
                          message: NSLocalizedString( @"Msg Alert",@"Msg Alert")
                          delegate:_delegate 
                          cancelButtonTitle:nil
                          otherButtonTitles: NSLocalizedString(@"OK",@"OK"),nil];
    [alert setTag:0]; //so we know in the callback of the alert where we come from - in case we have multiple different alerts
    [alert show];
}

//the local callback for the alert - this handles the case when we call the alert with delegate nil
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    D_DBG(@"%i %i",[alertView tag],buttonIndex);
}

アラートが必要な UIViewController クラスに *.h ファイルをインポートします。

次のように呼び出す場合:

   [self showAlertWithDelegate:nil];

アラートが表示され、デリゲートが実装されます

 - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex

インターフェースでは、次のように呼び出します。

   [self showAlertWithDelegate:self];

コールバックを提供する必要があります

 - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex

あなたがそれを呼び出したクラスでは、ユーザーが押したものは何でも処理できます-インターフェイスに実装されているものとは異なります。

于 2012-09-24T21:24:33.187 に答える