【问题标题】:unable to turn on switch while reloading tableview cell重新加载表格视图单元格时无法打开开关
【发布时间】:2015-05-28 06:09:00
【问题描述】:

当开关打开时,我的 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;
}

但我无法打开开关,重新加载单元格是否有任何问题。

【问题讨论】:

  • 确保开关控制superview不是UILabel那样的view,因为不能得到点击事件,并且确保没有任何清晰的背景色view覆盖它,你可以看到开关,但是无法获取点击事件。
  • 你需要一个 if ([cell.autoswitch isOn]) 的 else 语句,另一个是你如何将 BOOL 分配给 cell.autoswitch?您需要有一个“选定的 indexVariable”来检查这是否是您打开开关的索引..

标签: ios objective-c uitableview uiswitch


【解决方案1】:

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

由于单元重用和新单元实例的创建,无法使用单元。尝试使用细胞也是一个糟糕的设计......

【讨论】:

  • 但根据开关状态,我需要更新我使用 if(cell.autoswitch.on) 的日期模型,但它不起作用
  • 您需要在开关状态发生变化时将其传回,然后触发重新加载。你已经有didchangeswitchpostion: 并且不知何故你似乎知道reloadindexpath 所以你也知道开关?
【解决方案2】:

尝试按照以下步骤操作:

  1. 在开关动作上,找到被点击的开关的索引路径是什么。将该索引路径存储在实例 var 中,以便稍后在从“cellForRowAtindexpath”配置和返回单元格时比较该索引路径。同时保存开关状态,无论是开还是关。

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

  3. 在 cellForRowAtIndexpath: 方法中比较存储的索引路径(第一步完成)和当前的索引路径路径,如果是相同的行和节,则将该单元格中的开关状态设置为已保存值(在第一步中完成)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2015-09-30
    • 2011-05-26
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多