UISwitch没有改变价值

时间:2013-07-29 06:22:32

标签: uitableview uiswitch uicontrol

我在代码中向UITableViewCell添加了一个UISwitch,并添加了一个目标/动作。问题是当触摸UISwitch时,它开始动画到相反的值,然后购买然后停止动画并返回到先前的值。所以滑块基本上会从OFF到ON滑动75%,然后再回到OFF,所以我无法切换它。一旦切换,我在UITableView中添加一个部分,我不知道为什么这不起作用。有人能告诉我我的代码是否有任何问题?

这是我添加UISwitch的地方:

self.forSaleSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(223.0f, 8.5f, 0.0f, 0.0f)];
                [self.forSaleSwitch addTarget:self
                                       action:@selector(switchTapped:)
                             forControlEvents:UIControlEventValueChanged];
                self.forSaleSwitch.backgroundColor = [UIColor clearColor];
                self.currentAnnotation.isHouseForSale = (self.forSaleSwitch.on) ? YES : NO;

                [cell addSubview:self.forSaleSwitch];

这是UISwitch的行动:

- (void)switchTapped:(id)sender
{
    UISwitch *switcher = (UISwitch *)sender;
    if (switcher.on)
    {
        [switcher setOn:NO animated:YES];
        self.currentAnnotation.isHouseForSale = NO;
        NSLog(@"OFF");
    }
    else
    {
        [switcher setOn:YES animated:YES];
        self.currentAnnotation.isHouseForSale = YES;
        NSLog(@"ON");
    }
    [self.tableView reloadData];
}

2 个答案:

答案 0 :(得分:2)

当你调用reloadData方法时,你要求表视图刷新并重新加载所有单元格。 如果您没有在某处存储交换机的值,然后在创建单元时将其恢复,那么它将始终返回其默认状态,即NO。

答案 1 :(得分:0)

你正确地设置它,问题是

[self.tableView reloadData];

当单元格重新加载时,它将进入默认设置。移动该行并且代码将正常工作。如果您想在htat时间重新加载以用于其他目的,请通过将状态保存在某个变量中来管理开关状态,用它来设置cellForRowAtIndexpath