重新加载tableview单元格时无法打开开关

时间:2015-05-28 06:09:01

标签: ios objective-c uitableview uiswitch

我在切换开启时切换了我的tableview我需要更改tableview单元格中的视图,因为我已经写了

 -(void)didchangeswitchpostion:(UISwitch *)sender{

    [tasklogtableview reloadRowsAtIndexPaths:@[reloadindexpath] withRowAnimation:UITableViewRowAnimationNone];
}

在索引路径的行的单元格中,我已经完成了

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;{

    static NSString *cellidentifier=@"cellidentifier";

    cell=(TaskLogTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellidentifier];

    if (cell==nil) {

        NSArray *nib=[[NSBundle mainBundle]loadNibNamed:@"TaskLogTableViewCell" owner:self options:nil];
        cell=[nib objectAtIndex:0];  
    }

    if ([cell.autoswitch isOn]) {
        cell.lblfrom.hidden=YES;
        cell.lblhours.hidden=YES;
        cell.lblfromtime.hidden=YES;
      }

    return cell;
}

但我无法打开其他电源,重新加载电池是否有任何问题。

2 个答案:

答案 0 :(得分:0)

您不应该使用cell.autoswitch来决定做什么。更改开关后,您应该更新数据模型,然后重新加载行(或直接更新单元格),此更新应使用数据模型来决定要做什么。

由于细胞重用和正在创建的新细胞实例,使用细胞不起作用。试图使用单元格也是一个糟糕的设计...

答案 1 :(得分:0)

尝试按照以下步骤操作:

  1. 在切换操作中,找到被点击的交换机的索引路径。将索引路径存储在实例var中,以便稍后在配置并从“cellForRowAtindexpath”返回单元格时可以比较此索引路径。同时保存开关状态,无论是打开还是关闭。

  2. 重新加载将再次为表格单元调用cellForRowAtIndexPath的表

  3. 将存储的索引路径(完成第1步)与cellForRowAtIndexpath:方法中的当前索引路径路径进行比较,如果它是同一行&部分,然后将该单元格中的开关状态设置为保存值(在第1步中完成)