我正在尝试更新单元格内的标签(注意,这不是单元格的标签文本。它是单元格中的另一个自定义标签),用户从上一个屏幕中选择一个值并且导航控制器将它们弹回
然而,当我调用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
答案 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;
}