0

私はXcodeでアプリを構築しており、NIBには81個のテキストビューがあり、それぞれに連続した名前が付いているため、box1、box2、box3、box4などです。

データ操作を行うとき、たとえば、各ボックスのデータを使用して配列に追加できるようにしたいです。私ができるようにしたいのは、これをループに入れることです。たとえば、次のようになります。

NSMutableArray *array = [[NSMutableArray alloc] init];
for (int i=1; i<82; i++) {
    [array addObject: [Indirect("box" & i).text];
}

同様に、テキストビューに出力するときは、各テキストビューを個別に参照するのではなく、配列からループできるようにしたいです。だから次のようなもの:

for (int i=1; i<82; i++) {
    indirect("box" & i).text = [array objectAtIndex:i];
}

何か案は?これが明らかな場合は申し訳ありません-ゲームにはかなり新しいです。

4

3 に答える 3

1

タグを使用してこれを処理します。ペン先で 1 から 81 まで設定できます ( Controlの下のフィールドを探します)。

次に、ループ内で-awakeFromNib呼び出すことができます。[self viewWithTag:i]for

個々のアウトレットよりも作業が少ないことは間違いありません。また、アウトレット コレクションよりも簡単だと思います。番号を入力すると、すべてのテキスト フィールドにアウトレットを接続する必要がなくなります。

于 2012-04-27T02:53:11.600 に答える
1

MVC 設計パターンを検討してください。計算は、ビュー (UI) に直接基づいて行うのではなく、ビューによって設定されるコントローラーの状態に基づいて行う必要があります。フィールドが編集されるたびに、ターゲット/アクションまたは Cocoa バインディングを介してコントローラーに通知します。それが起こると、コントローラーはデータモデルを更新します(あなたの場合、それは計算を更新し、おそらくUIの別の部分である「合計」フィールドに結果を反映することを意味します)。

于 2012-04-26T14:09:05.047 に答える
1

Cocoa には、次の 2 つの方法があります。

  1. の配列にすべてのフィールドを追加しawakeFromNibます。82のaddObject:メッセージを書いて楽しんでください。
  2. nib からフィールドを削除し、コード内のループで作成して、それぞれを配列に追加します。(これは私がすることです。)

それらが配列に入ると、文字列の場合と同じように、インデックスでそれらを参照できます。

しかし、あなたはフィールドのtextプロパティにアクセスしていると述べています。これは Cocoa Touch にのみ存在し、Cocoa には存在しません。Cocoa Touch を使用している場合は、3 番目のオプションがあります。

  • 82 アウトレットをアウトレット コレクションに置き換えます。

アウトレット コレクション プロパティの値は配列であるため、nib にフィールドを作成できますが、コード内の配列へのインデックスによってそれらを参照できます。

一方で、私はほとんどの Cocoa Touch 開発者よりも親しみやすいのですが、コードでそれらを作成する可能性があります。その一部は習慣ですが (私はまだほぼ完全に Mac 開発者です)、一部は DRY 原則です。コード内のループでフィールドを作成すると、すべてのフィールドを 1 回だけ記述し、それらの違いを説明できます。1 つのフィールドを変更して他のフィールドを更新するのを忘れたり (または単に) 変更したり、すべてのフィールドを変更して (再び) 1 つを変更するのを忘れたりするリスクはありません。

于 2012-04-26T16:53:15.290 に答える