質問

現在、クラスがポップアップしています UIAlertViewあちらこちらにあります。現在、同じクラスがこれらのデリゲートです (そうなるのは非常に論理的です)。残念ながら、これらは UIAlertViews は、クラスの同じデリゲート メソッドを呼び出します。さて、問題は、デリゲート メソッドがどのアラート ビューから呼び出されているかをどのようにして知ることができるかということです。アラート ビューのタイトルを確認することだけを考えていましたが、それはそれほどエレガントではありません。いくつかの処理を行う最もエレガントな方法は何ですか? UIAlertViewは?

役に立ちましたか?

解決

このようなタグUIAlertViewsます:

#define kAlertViewOne 1
#define kAlertViewTwo 2

UIAlertView *alertView1 = [[UIAlertView alloc] init...
alertView1.tag = kAlertViewOne;

UIAlertView *alertView2 = [[UIAlertView alloc] init...
alertView2.tag = kAlertViewTwo;

、その後、これらのタグを使用してデリゲートメソッドでそれらを区別します:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if(alertView.tag == kAlertViewOne) {
        // ...
    } else if(alertView.tag == kAlertViewTwo) {
        // ...
    }
}

他のヒント

参考までに、iOS 4 ユーザーのみをターゲットにしたい場合 (これは合理的です) 現在、約 98.5% のクライアントに少なくとも iOS 4 がインストールされています)、Blocks を使用して、UIAlertView の非常に優れたインライン処理を行うことができるはずです。

これを説明する Stackoverflow の質問は次のとおりです。
UIAlertViewDelegate のブロック

これには、Zachary Waldowski の BlocksKit フレームワークを使用してみました。彼の UIAlertView(BlocksKit) API リファレンスは本当に良さそうでした。ただし、フォローしようとしました BlocksKit フレームワークをインポートするための彼の指示 私のプロジェクトに組み込んだのですが、残念ながら動作させることができませんでした。

そこで、Can Berk Güder が示唆しているように、私は次のようにしました。 UIAlertView とりあえずタグ。しかし、将来のある時点で、Blocks (できればすぐに ARC をサポートするブロック) の使用に移行しようと考えています。

より簡単&新しい

UIAlertView *alert = [[UIAlertView alloc] init...
alert.tag = 1;

UIAlertView *alert = [[UIAlertView alloc] init...
alert.tag = 2;



- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if(alertView.tag == 1) {
        // first alert...
    } else  {
        // sec alert...
    }
}

すべてやった!

あなたはこの全体の試練を克服し、ブロックコールバックを使用するようにUIAlertViewを強化することにより、タグを使用してから自分を防ぐことができます。 このブログの記事をチェック>私は、件名に書いています。

私はいつもタグを使用すると、ハッキングのビットであると思ってきました。あなたがそれらを使用する場合、少なくとも、タグ番号については、いくつかの定義された定数を設定します。

その代わり、私はこのようなプロパティを使用します:

インターフェイスセクションで

@property (nonatomic, weak) UIAlertView *overDueAlertView;
@property (nonatomic, weak) UIAlertView *retryPromptAlertView;

のアラートビューを作成します

UIAlertView *alert = [[UIAlertView alloc] init...
self.overDueAlertView = alert;
[alert show];

デリゲートメソッド:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
  if (alertView == self.overDueAlertView) {
    // Overdue alert
  } else if (alertView == self.retryPromptAlertView) {
    // Retry alert
  }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top