0

ストーリーボードを使用して、複数の動的プロトタイプ セルを含むテーブル ビュー コントローラーを作成しました。セルの 1 つは、ラベルとスイッチを含む (サブクラスを作成した) カスタムの動的プロトタイプ セルです。ビュー コントローラーのアクション メソッド (たとえば、switchChanged:) に接続されたスイッチのアクションがあります。cellForRowAtIndexPath では、指定されたインデックスに適したセルを構成して返します。ここまでは順調ですね。

問題: 私のアプリケーションにはこれらのカスタム セルのインスタンスが複数あるため、変更されたスイッチをどのように区別すればよいでしょうか? 1 つの考えは、ビュー コントローラーで各セルのメンバー スイッチを作成し、cellForRowAtIndexPath が初めて呼び出されたときにそれらを特定のセル スイッチにリンクできるということです。次に、これらのメンバー スイッチを使用して、switchChanged: に渡されたスイッチと比較できます。

試してみてすぐに答えが得られることはわかっていますが、私がやろうとしていることを他の開発者がどのように行っているかについての議論を望んでいました. これは最善/最悪/OKのアプローチであり、実用的な代替手段は何ですか?

よろしく、

--ジョン

4

2 に答える 2

1

私はかつてこの状況を経験しました(スイッチではありませんが、まったく同じことが当てはまると思います)。オブジェクトクラスをサブクラス化し、サブクラス内に必要なプロパティ/メソッドを追加することで、なんとか回避できました。

アクションを呼び出すと、送信者がサブクラスになり、そこに追加されたコードにアクセスできます。

そうであるかどうかはわかりませんが、値を変更するだけであれば、オブジェクトを作成するときにスイッチ値をプロパティにバインドする必要があります。IBAction を呼び出す必要さえありません。

編集: 例:

@interface MySwitch : UISwitch
@property (nonatomic, assign) NSUInteger someProperty;
@end

次に、セルを作成するたびに、「someProperty」を任意に設定できます。

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
  // yada yada yada...
  UITableViewCell *cell;
  // yada yada yada...

  [cell.myLinkedSwitch  setSomeProperty:indexPath.row];
  return(cell);
}

tableView:cellForRowAtIndexPath:メソッドを使用してセルを作成していない限り。次に、適切な場所に値を取得するためにバインディングを使用する必要があります。

于 2012-06-13T13:14:39.347 に答える
0

別のサブクラスを追加する代わりに、各ボタンの Disabled Title プロパティに行を格納しました。これは、ほとんど努力することなく非常にうまくいきました。この最初のコードは、CellForRowAtIndexPath にあります。

NSString *strRow = [[NSString alloc] initWithFormat:@"%i",useRow];
[btnPreferredChk setTitle:strRow forState:UIControlStateDisabled];

次に、ボタンのアクション メソッドがその値を使用して適切なアクティビティを実行します。

- (IBAction)goStorePick:(id)sender
{
  UIButton *useButton = [[UIButton alloc] init];
  useButton = sender;
  NSInteger *storeRow = [[useButton titleForState:UIControlStateDisabled] integerValue];

  NSString *CMIMsg = [[NSString alloc] initWithFormat:@"goStorePick Method Executed at Row: %i", storeRow];

  [self shwMessage:CMIMsg];
}

これは私にとってはうまくいきました。

于 2013-03-04T01:42:51.117 に答える