このフォーラムのすばらしい投稿を使用して、tableView のアクセサリビューとしてスイッチを作成しました。スイッチに触れると、アクション (switchChanged) が呼び出されます。送信者のみが有効な値を持ち、イベントは 0x0 です。
switchView へのターゲットの追加:
[switchView addTarget:self action:@selector(switchChanged:forEvent:) forControlEvents:(UIControlEventValueChanged | UIControlEventTouchDragInside)];
アクション:
- (void) switchChanged:(id)sender forEvent:(UIEvent *)event {
if(event) {
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:[[[event touchesForView:sender] anyObject] locationInView:self.tableView]];
IFDFlightlogFormQuestions *question = [self.resultsController objectAtIndexPath:indexPath];
NSLog(@"IFDNewFlightlogViewController_Pad:switchChanged Switch is %@ xmlAttrib %@",[sender isOn],question.XmlAttrib);
[self.xmlResults setValue:([sender isOn])?@"true":@"false" forKey:question.XmlAttrib];
}
}
使用action:@selector(switchChanged: forEvent:)
- スペースを追加 - 変更なし。
使用action:@selector(switchChanged::)
- 削除forEvent
- 認識されないセレクター。
私の目標は、tableView への indexPath を取得して、辞書の値を変更できるようにすることです。
私の現在の回避策は、送信者情報のみを使用することですが、イベント情報が必要です:
- (void) switchChanged:(id)sender forEvent:(UIEvent *)event {
UISwitch *switchView = (UISwitch *)sender;
UITableViewCell *cell = (UITableViewCell *)switchView.superview;
UITableView *tableView = (UITableView *)cell.superview;
NSIndexPath *indexPath = [tableView indexPathForCell:cell];
IFDFlightlogFormQuestions *question = [self.resultsController objectAtIndexPath:indexPath];
NSLog(@"IFDNewFlightlogViewController_Pad:switchChanged Switch is %@ xmlAttrib %@",([sender isOn])?@"On":@"Off",question.XmlAttrib);
[self.xmlResults setValue:([sender isOn])?@"true":@"false" forKey:question.XmlAttrib];
}
これに関するイベント情報を取得するための指針はありますか?