【问题标题】:UISwitch not changing valueUISwitch 不改变值
【发布时间】:2013-07-29 06:22:32
【问题描述】:

我在代码中向 UITableViewCell 添加了一个 UISwitch,并添加了一个目标/动作。问题是当 UISwitch 被触摸时,它开始动画到相反的值,buy 然后停止动画并返回到之前的值。所以基本上滑块会从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];
}

【问题讨论】:

    标签: uitableview uiswitch uicontrol


    【解决方案1】:

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

    【讨论】:

    • 我把reloadData方法完全去掉了,问题还是没有解决。
    【解决方案2】:

    你设置正确,问题是

    [self.tableView reloadData];
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 2015-07-20
      • 2019-08-26
      相关资源
      最近更新 更多