0

UISwitch を UITableViewCell accessoriesView として保持する UITableView があります。ここに画像の説明を入力

スイッチの変更に応答するメソッドを作成しようとしています。基本的に、特定の時間に開いているバルブは1つだけであるべきなので、スイッチをオンにすると、すでにオンになっているスイッチがオフに切り替わります。

私はそのようなことをしました:

-(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 に答える