ここに投稿されたいくつかのアプローチを試しましたが、テーブルをスイッチでいっぱいにして、変更されたスイッチのセルのインデックス値を返すことができません。プログラムでテーブルを含むビューを作成しています(xibなし)。
TableSandboxAppDelegate.mビュー コントローラーを次のようにインスタンス化しますdidFinishLaunchingWithOptions:
。
...
TableSandboxViewController *sandboxViewController = [[TableSandboxViewController alloc]
init];
[[self window] setRootViewController:sandboxViewController];
...
TableViewController.hファイルの読み取り:
@interface TableSandboxViewController : UITableViewController
{
NSMutableArray *_questionOrder;
NSMutableArray *switchStates;
}
@end
TableViewController.m の cellForRowAtIndexPath:
読み取り:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MainCell"];
UISwitch *theSwitch = nil;
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"MainCell"];
theSwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
theSwitch.tag = 100;
[theSwitch addTarget:self action:@selector(switchChanged:)
forControlEvents:UIControlEventValueChanged];
[cell.contentView addSubview:theSwitch];
} else {
theSwitch = [cell.contentView viewWithTag:100];
}
if ([[switchStates objectAtIndex:indexPath.row] isEqualToString:@"ON"]) {
theSwitch.on = YES;
} else {
theSwitch.on = NO;
}
return cell;
TableViewController.m の -(IBAction)switchChanged:(UISwitch *)sender
読み取り:
UITableViewCell *theParentCell = [[sender superview] superview];
NSIndexPath *indexPathOfSwitch = [self.tableView indexPathForCell:theParentCell];
NSLog(@"Switch changed at index: %d", indexPathOfSwitch.row);
私のログ結果は常に「Switch changed at index: 0」です。問題は、「送信者」の置換の組み合わせ([送信者スーパービュー]、[[送信者スーパービュー]スーパービュー]など)を試したCGPoint行にあるように感じます。その行がテーブルを表示するビューを指しているようには感じません。
私は何を間違っていますか?
10 月 9 日 9:15 EDT に追加されたメモ:私の目標は、テーブル内の約 100 の「はい/いいえ」の質問を処理できるようにすることです。そのため、再利用が重要です。スクロールして各スイッチの状態をテーブルに表示し、ビューを離れるときにそれらを取得できるようにしたい。