self.tableView reloadData是在单元格标签中堆叠文本而不是先清理它

时间:2013-01-31 14:52:17

标签: iphone ios objective-c xcode ipad

我正在尝试更新单元格内的标签(注意,这不是单元格的标签文本。它是单元格中的另一个自定义标签),用户从上一个屏幕中选择一个值并且导航控制器将它们弹回

然而,当我调用reloadData时,而不是正在清理的单元格中的标签以及放置的新值,它实际上堆叠在已经存在的内容之上。就像你拿了200号并在它上面放了50。你会得到一个奇怪的0和5网格。

有关如何调整此问题的任何想法?我是否必须将标签的文本重置为“”每个视图都显示?如果是这样,最好的方法是什么,我已尝试过cellForRowAtIndexPath方法,但没有改变。

cellforRowAtIndexPath代码

 // Set up the cell...
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    // get the dictionary object
NSDictionary *dictionary = [_groups objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"key"];
NSString *cellValue = [array objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;

//label for currently selected/saved object
_currentSetting = [[UILabel alloc] initWithFrame:CGRectMake(160, 8, 115, 25)];
[_currentSetting setFont:[UIFont systemFontOfSize:14]];
_currentSetting.backgroundColor = [UIColor clearColor];
_currentSetting.textColor = [UIColor blueColor];
_currentSetting.textAlignment = NSTextAlignmentRight;

_currentSetting.text = [NSString stringWithFormat:@""];
_currentSetting.text = [NSString stringWithFormat:@"%@ mi",[setting.val stringValue]];

 [cell.contentView addSubview:_currentSetting];

 return cell

2 个答案:

答案 0 :(得分:2)

您正在重新创建标签,并在每次刷新单元格时重新添加标签。只有在第一次创建单元格时才应添加所有单元子视图。

因此,在您的代码中,您首次创建了一个单元格和所有子视图。然后,如果您需要一个新的单元格进行滚动或任何其他原因,您将获得一个可重用的单元格,该单元格已经添加了所有子视图(可重用...)。然后,您将再次执行添加子视图的过程,以便该单元格包含该单元格的先前所有者(数据)和该单元格的新所有者(数据)的子视图。这就是为什么当你重新加载数据时它们堆叠在彼此的顶部。

seudo代码:

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];
   if (cell == nil) {
      //Add all subviews here
   }

   //Modify (only modify!!) all cell subviews here

   return cell;
}

答案 1 :(得分:1)

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

    UILabel *customLabel;

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        customLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,0,320,44)];
        customLabel.tag = 123;
        [cell addSubview:customLabel];
    } else {
        customLabel = (UILabel *)[cell viewWithTag:123];
    }

    customLabel.text = @"Some nice text";

    return cell;
}