调用didSelectRowAtIndexPath时激活单元的附件视图(UISwitch)

时间:2012-02-20 20:30:51

标签: objective-c ios uitableview uiswitch didselectrowatindexpath

我的tableView的每个单元都有一个UISwitch作为accessoryView:

UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
cell.accessoryView = mySwitch;
[mySwitch addTarget:self action:@selector(SwitchToggle:) forControlEvents:UIControlEventValueChanged];

当用户点击切换时切换,但我也希望在调用didSelectRowAtIndexPath时切换(当用户点击该单元格时)。

我尝试了这个(但它不起作用):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{  
    UISwitch *tempSwitch = (UISwitch *)[tableView cellForRowAtIndexPath:indexPath].accessoryView;
    [tempSwitch addTarget:self action:@selector(SwitchToggle:) forControlEvents:UIControlEventValueChanged];

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; // cell selection fadeout animation
}

感谢。

1 个答案:

答案 0 :(得分:1)

代码必须如下所示:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{  
    UISwitch *tempSwitch = (UISwitch *)[tableView cellForRowAtIndexPath:indexPath].accessoryView;
    [tempSwitch setOn:!tempSwitch.on animated:YES];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

请记住,您还必须更新模型。