在自定义UITableViewCell内打开/关闭UISwitch

时间:2014-01-11 00:21:20

标签: ios objective-c uitableview uiswitch

我在一些自定义UITableViewCell中有一个UISwitch,当我在它们上面调用setOn:animated:时,它们无法直观更新。

  • 我能够很好地获得/设置on值。
  • 如果我使表格视图出列并重新绘制,则会显示正确的可视化表示。
  • 在表格视图上调用reloadData将突然更新交换机(不是我想要的)
  • tableView -reloadRowsAtIndexPaths:withRowAnimation还使用从旧到新的交叉渐变(自动行动画)更新视图
  • setNeedsLayoutsetNeedsDisplay似乎对交换机或超级视图没有任何影响

我想要做的是致电[theSwitch setOn:onValue animated:YES];并让开关动画显示正确的开/关位置。

有什么想法吗?

编辑:添加代码段...

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = @"SwitchedCell";
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if(!cell) {
        cell = [[SettingsSwitchedTableCell alloc] init];
    }

    if([cell class] == [SettingsSwitchedTableCell class]){
                [[(SettingsSwitchedTableCell *)cell theSwitch] setOn: [[self.feedbackDS valueForRow:indexPath.row] boolValue]];
                [[(SettingsSwitchedTableCell *)cell theSwitch] addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
            }
}

重置方法(应该使用动画设置开关,但需要重新加载表格)

-(void)resetSettings {
    NSInteger rows = [self tableView:self.tableView numberOfRowsInSection:0];
    for(NSInteger ii=0; ii<rows; ii++){
        UITableViewCell *cell = [self tableView:self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:ii inSection:0]];
        if( [cell class] == [SettingsSwitchedTableCell class]){
            [[(SettingsSwitchedTableCell *)cell theSwitch] setOn:YES animated:YES];
            [self.tableView reloadRowsAtIndexPaths:@[ [NSIndexPath indexPathForRow:ii inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
        }
    }
}

0 个答案:

没有答案