UISwitchの内部がいつUITableViewCellタップされたかを知る方法は?
私UISwitchは次のようにセル(汎用セル)の内部に設定されています。
UISwitch *mySwitch = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease];
[cell addSubview:mySwitch];
cell.accessoryView = mySwitch;
そして、私はこのようなタップを検出しようとしています(しかしそれは機能していません):
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
NSUserDefaults *prefs;
if(indexPath.section == 1){
switch(indexPath.row)
{
case 0:
NSLog(@"Tapped Login Switch");
break;
default:
break;
}
}
}
Dave DeLongは、解決策として各スイッチのアクションを設定することを提案しました。そこで、スイッチを設定するために次のことを行いました。
UISwitch *mySwitch = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease];
[mySwitch addTarget:self action:@selector(switchToggled2:) forControlEvents: UIControlEventTouchUpInside];
if(at_songs){
[mySwitch setOn:YES animated:NO];
}
[cell addSubview:mySwitch];
cell.accessoryView = mySwitch;
そして、それがいつタップされたかを知るために以下を実行します。
-(IBAction)switchToggled1:(id)sender {
NSUserDefaults *prefs;
NSLog(@"Tapped Login Switch");
prefs = [NSUserDefaults standardUserDefaults];
if(at_login){
[prefs setObject:@"NO" forKey:@"autotweet_login"];
at_login = NO;
}else{
[prefs setObject:@"YES" forKey:@"autotweet_login"];
at_login = YES;
}
}
スイッチをオンにしても問題ありません。現在の問題は、UISwitchがOFFに設定されている場合、何らかの理由でそのアクションが2回呼び出されることです(1回のタップで2つのNSLogを取得します)。
スイッチをオフにするために1回タップするだけでアクションがTWICEと呼ばれるのはなぜですか?どうすれば修正できますか?