0

私は次の問題を解決しようとしています。ヘッダーファイルに次の定数があります。

#define PREFS_MY_CONSTANT_1 @"bla1"
#define PREFS_MY_CONSTANT_2 @"bla2"
#define PREFS_MY_CONSTANT_3 @"bla3"
...

私の関数の1つで、ユーザー入力に基づいてこれらの文字列の1つをUIbuttonに出力したいので、ユーザーが「1」と入力すると、bla1が表示されます。巨大なスイッチ(100個あります)を作成する代わりに、定数とユーザー入力を保持する変数を組み合わせる方法を探しています。理想的には、次のようなものです。

NSInteger input;
[button setTitle:PREFS_MY_CONSTANT_{$input} forState: UIControlStateNormal];

そのようなことは可能ですか?これを解決するための最良の方法は何でしょうか?

4

3 に答える 3

4

NSStringリテラルのプレーンC配列を定義します。

static NSString *prefs[] = {
    @"foo",
    @"bar",
    @"baz",
};

0ベースのインデックスを使用するか、使用しない最初のエントリに。のように何かを入れますnil。次にprefs[input]、必要な文字列が表示されます。

(最後のエントリの後のコンマは間違いではありません。最初にコンマを追加しなくてもエントリを追加できます。編集が簡単になり、改訂履歴が読みやすくなります。)

静的配列の要素数は、コンパイル時に決定できます。私は通常これにマクロを使用します:

#define ARRAYSIZE(array) (sizeof(array) / sizeof(array[0]))

次に、ユーザー入力をと比較してARRAYSIZE(prefs)、範囲内にあることを確認できます。

于 2012-10-25T05:08:04.730 に答える
2

別の方法はNSArray、これに使用することです。

次のような配列を作成します。

NSArray *titleArray = [[NSArray alloc] initWithObjects:@"bla1",@"bla2",@"bla3", nil];

ボタンのタイトルは次のように設定できます。

[button setTitle:[titleArray objectAtIndex:input] forState: UIControlStateNormal];
于 2012-10-25T05:08:25.653 に答える
0

このためNSString

NSString *input = [NSString stringWithFormat:@"PREFS_MY_CONSTANT_%@",input];
[button setTitle:input forState: UIControlStateNormal];

          or
 [button setTitle:[NSString stringWithFormat:@"PREFS_MY_CONSTANT_%@",input] forState:     UIControlStateNormal];

役に立ったら教えてください。

よろしく、アニル

于 2012-10-25T05:00:43.710 に答える