0

さまざまなタイプのアイテムのリストを含む私の tableViewController は、モーダル ダイアログ ボックスを表示するボタンを提供します。このダイアログ ボックス (アラート ビューに似ています) は、ユーザーに 6 つのオプションのリストからの排他的な選択を提供します。ユーザーが選択して確認した内容に基づいて、テーブル ビュー コントローラーのメイン画面のリストがフィルター処理され、選択したタイプに一致する項目のみが表示されます。現時点では、これらの 6 つの型が typedefed 列挙型にリストされています。ここまでは順調ですね。ただし、列挙で使用されるタイプと名前が一致する 6 つの nsstring をカスタム ダイアログ ボックスに入力できるようにする必要もあります。これらの文字列のソースに対する私の要件とこの列挙型をどのように調和させるのですか? 私は何もハードコードしたくありません。

4

3 に答える 3

2

列挙値ごとに文字列を返すヘルパーメソッドが必要です。これは、ローカリゼーションの可能性に対処するために作成する必要があります。すべてのデータとイベント処理は、列挙値に基づいている必要があります。文字列は表示に使用する必要があります。

ヘルパーメソッドは列挙値を取り、switchステートメントを使用して適切な文字列を返す必要があります。

于 2012-12-07T19:47:36.073 に答える
1

私はいくつか考えることができます:

  • 列挙型を文字列の束に変更します。これも整数である必要がある場合、物事を少し面倒にします(-[NSArray indexOfObject:])。
  • 文字列のC配列を作成します。これにより、C99の便利な構文を使用できます。

    NSString * const names[] = {
      [Foo] = @"Foo",
      [Bar] = @"Bar",
    };
    
  • 上記を行うための自動生成されたコード。

警告:

  • これらは両方ともi18nをかなり苦痛にします。これは、1つの言語でのみ必要となる契約作業の場合は関係ないかもしれませんが、それは悪い習慣です。
  • ボタンインデックスをキーとして使用することは、中央のボタンを削除する必要があると判断するまで機能します。文字列キーは、一般的なケースではるかにうまく機能します((key、title)ペアを受け入れ、ボタンインデックスの代わりにキーを返すUIAlertView / UIActionSheetラッパーを作成しました)。
于 2012-12-07T19:47:15.247 に答える
1

「何もハードコーディングしたくない」というあなたの発言は、コードに文字列定数が必要ないことを意味します。そう:

文字列をシートの UI 要素 (おそらくチェック ボックスなど) に割り当てるだけで、これらの UI 要素に、列挙に一致するタグ値 (シートを閉じるときにクエリできるもの) を与えることができます。これには、シートを簡単にローカライズできるという追加の利点があります。

または:

文字列をシートから分離したい場合は、次のような形式の .strings ファイル (おそらく Enumeration.strings などと呼ぶことができます) を作成できます。

"001" = "string one";
"002" = "string two";
.
.
"010" = "string ten";

そして、次のように列挙値を使用して文字列を取得できます。

NSString *myString = NSLocalizedStringFromTable([NSString stringWithFormat:@"%03d", myEnumerationValue], @"Enumeration", @"");

ただし、文字列を UI にプラグインし、s を通じて UI 要素を追跡する方法が必要になりますIBOutlet。ここでは小数点以下 3 桁を使用したことに注意してください。おそらく、2 つ、または 1 つでも十分に対応できます。最後に、最初の提案のようにローカライズする機能が得られます。

于 2012-12-07T20:57:50.193 に答える