0

アプリケーション用に独自のカスタム アラート ビューを作成しています。顧客は、アラート タイプのメッセージに対して独自のルック アンド フィールを持っています。サブクラス化は本当に良い考えではないことを読んだUIAlertViewので、使用している現在のメッセージ ビューをもう少し動的にして、もう少し再利用できるようにしようとしています。

わかりました、私の質問です。UIAlertView独自のカスタム アラートを初期化するために初期化を盗んでいます。

- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION;

これは、Apple のUIAlertViewイニシャライザから直接取得されたものです。私のものはまったく同じように機能するので、initを使用してみませんか。

のように、複数の文字列を渡せるようにしotherButtonTitlesたいUIAlertView。私の質問は、渡された文字列にどのようにアクセスするのですか?

4

1 に答える 1

1

otherButtonTitles引数を NSString ではなく NSArray にすることもできます。そこから、配列の数に基づいて追加のボタンを動的に生成し、そのボタンのタイトルを配列の現在のインデックスに格納されている NSString に設定できます。

編集: UIAlertView.mで有望なものを見つけたと思います(実際にAppleからのものかどうかはわかりません)が、otherButtonTitlesも文字列として受け取ります。を使用しva_listて otherButtonTitles を格納し、インデックス 0 のキャンセル ボタン (該当する場合) を含むすべてのボタンを含む可変配列にオブジェクトを追加します。

https://github.com/BigZaphod/Chameleon/blob/master/UIKit/Classes/UIAlertView.m

ここに抜粋があります:

 if (otherButtonTitles) {
        [self addButtonWithTitle:otherButtonTitles];

        id buttonTitle = nil;
        va_list argumentList;
        va_start(argumentList, otherButtonTitles);

        while ((buttonTitle=(__bridge NSString *)va_arg(argumentList, void *))) {
            [self addButtonWithTitle:buttonTitle];
        }

        va_end(argumentList);
    }
于 2013-01-07T16:36:10.123 に答える