0

我有一个 UITableView,它将 UISwitch 作为 UITableViewCell 附件视图。在此处输入图像描述

我正在尝试创建一种响应开关更改的方法。基本上在任何给定时间都应该只有一个阀门打开,所以我希望当我打开一个开关时,它会使已经打开的开关关闭。

我做了这样的事情:

-(IBAction)openCloseValve:(id)sender

{

UISwitch *theSwitch = (UISwitch *)sender;

if ([theSwitch isOn])

{

    //Open Valve!

    NSLog(@"Opening Valve!");

    Storage *strg = [Storage sharedStorage];

    

    UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:strg.openValve.intValue-1 inSection:0]];

    UISwitch *newSwitch = [[UISwitch alloc] initWithFrame:CGRectZero];

    newSwitch.onTintColor = [UIColor greenColor];

    newSwitch.on = NO;

    oldCell.accessoryView = newSwitch;

    
    strg.openValve= [[NSNumber alloc] initWithInt:theSwitch.tag + 1];

    NSLog(@"%d", strg.openValve.intValue);

} else {

    //Close Valve!

    NSLog(@"Closing Valve!");

}

}

到目前为止,它什么也没做。我知道正在调用该方法。我究竟做错了什么?

4

1 回答 1

0

旧单元格需要通过 [tableView reloadCellsAtIndexPath:] 进行更新。您可以通过更新旧开关而不是创建新开关来避免这种情况:

UISwitch *oldSwitch = (UISwitch *)oldCell.accessoryView;
oldSwitch.on = NO;
于 2013-03-27T22:49:35.883 回答