7

コントロールをUITableView含む with セルがありますUISwitch。以下に示すiPhoneの時計アプリのテーブルビューに似ています...

代替テキスト
(出典: epicself.com )

私のアプリのメソッドでは、次のようにコントロールcellForRowAtIndexPathを作成してアタッチします...UISwitch

 CGRect frameSwitch = CGRectMake(215.0, 10.0, 94.0, 27.0);
 UISwitch *switchEnabled = [[UISwitch alloc] initWithFrame:frameSwitch];
 [switchEnabled addTarget:self action:@selector(switchToggled:) forControlEvents:UIControlEventValueChanged];

 cell.accessoryView = switchEnabled;

私の質問は、ユーザーがスイッチを切り替えてswitchToggledメソッドが呼び出されたときに、それがどのテーブルセルに属しているかをどのように判断できますか? 文脈がわからないとどうしようもない。

ご協力いただきありがとうございます。

4

2 に答える 2

9

まず、メモリ リークを修正します。

UISwitch *switchEnabled = [[[UISwitch alloc] initWithFrame:frameSwitch] autorelease];

次に、次のオプションのいずれかを選択します。

switchEnabled.tag = someInt; // before adding it to the cell

NSLog(@"switched %d",switch.tag); // to see which switch was toggled

また

UITableViewCell *parentCell = switchEnabled.superview;
// + some magic to see which cell this actually is
于 2010-08-11T20:27:45.637 に答える
9

superviewアクション メソッドでは、渡されたUISwitchもの (それUITableViewCell自体)をキャストし、それをtableViewindexPathForCellメソッドに渡すことができます。

indexPathForCellオブジェクトを返しNSIndexPathます。これを使用して、データモデルにインデックスを付けて変更できます。あとは、 に電話reloadDataするだけtableViewです。

また、 では、モデルに基づいて の状態をcellForRowAtIndexPath設定する必要があります。UISwitch

于 2010-08-11T20:29:02.590 に答える