UItableviewcell dequeueReusableCellWithIdentifier removeFromSuperview

时间:2014-10-23 18:29:38

标签: ios xcode uitableview

这可能是一个简单的问题,但我还没有找到合适的解决方案,所以我希望有人可以提供帮助。

我在故事板上有一个带有三个标签的单元格的tableview。 所有标签都通过IBOutlet连接,并具有正确的约束。

问题是我想根据数据删除第二个标签,以便保留约束,第三个标签使用其较低的约束来移近第一个标签。

但是当我运行以下代码时:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSString *simpleTableIdentifier = @"GroupMaterialCell";

  GroupMaterialCell *cell = (GroupMaterialCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

  // get data and populate row
  if([self.materialitems count] >= indexPath.row) {

    Material *material = [self.materialitems objectAtIndex:indexPath.row];

    cell.folder.text = [NSString stringWithFormat:@"%@: %@", NSLocalizedString(@"Folder", nil), material.folder];cell.name.text = material.name;;
    cell.member.text = material.member_name;
    cell.date.text = [material getDate];
    cell.info.text = [NSString stringWithFormat:@"%@, %@", [material getType], [material getFilesize]];

    if([material.folder length] <= 0) {
        [cell.folder removeFromSuperview];
    }

  }

    return cell;
}

代码工作正常,直到我向下滚动并重新使用单元格。 然后第二个标签“消失”(removeFromSuperview),因此不可见。

有没有一种快速的方法可以在代码中创建标签(带有约束)并添加/删除它?

希望这一切都有意义,否则问。

更新

解决方案是隐藏标签并设置约束的优先级。

创建要切换的约束的IBOutlet

使用以下内容编辑代码。

if([material.folder length] <= 0) {
        [cell.folder setHidden:YES];
        cell.memberToFolder.priority = 500;
        cell.memberToName.priority = 900;
    } else {
        [cell.folder setHidden:NO];
        cell.memberToFolder.priority = 900;
        cell.memberToName.priority = 500;

    }

1 个答案:

答案 0 :(得分:1)

不要从单元格中移除任何东西,只需处理它的可见性

      if([material.folder length] <= 0) {
              //set frame if required
                [cell.folder setHidden:true];
            } else {
             //set frame if required
               [cell.folder setHidden:false];
       }