我用UITableView获得了应用程序。
每个UITableViewCell都有UILabel。我以这种方式添加标签:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//look at the upd
}
但是当我尝试使用其他信息重新加载此表中的数据时,旧的信息(旧标签)不会消失,但仍然在单元格上。
看起来像这样:......
我应该如何组织添加UILabels?
UPD
我以这种方式更正代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Recent Dream";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
UILabel *textLabel = [[UILabel alloc] init];
textLabel.frame = CGRectMake(10, 0, self.view.frame.size.width -110, 48);
textLabel.backgroundColor = [UIColor clearColor];
textLabel.font = [UIFont boldSystemFontOfSize:16];
[textLabel setTag:(int)indexPath];
[cell.contentView addSubview:textLabel];
}
// Configure the cell...
Dream *tempDream = [self.dreams objectAtIndex:indexPath.row];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MM/dd/yyyy"];
//Optionally for time zone converstions
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]];
NSString *stringFromDate = [formatter stringFromDate:tempDream.dateAdd];
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"bodyWrapper.png"]];
cell.contentView.backgroundColor = background;
UILabel *textLabel = (UILabel *)[cell viewWithTag:(int)indexPath];
textLabel.text = tempDream.title;
NSLog(@"%@",tempDream.title);
NSLog(@"%@",textLabel.text);
cell.textLabel.text = @"";
cell.detailTextLabel.text = stringFromDate;
return cell;
}
输出看起来像这样:
2012-02-20 15:58:10.512 DreamerIOS[3037:10403] lllooooonggg dreeeeeeeaaaaammmm yeeeeeeah
2012-02-20 15:58:10.513 DreamerIOS[3037:10403] (null)
2012-02-20 15:58:10.516 DreamerIOS[3037:10403] dream to end
2012-02-20 15:58:10.516 DreamerIOS[3037:10403] (null)
2012-02-20 15:58:10.519 DreamerIOS[3037:10403] adsfhadskgh dfagfadkuy gadyv dsfdfad fsdf a ghfncdhg hjfg f dfj ghf
2012-02-20 15:58:10.519 DreamerIOS[3037:10403] (null)
所以,NSLog(@“%@”,tempDream.title);没问题,但NSLog(@“%@”,textLabel.text);一片空白。为什么呢?
答案 0 :(得分:1)
这是因为每次向单元格添加新标签。
初始化新单元格时,添加标签并为其设置标记
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
// add label here
...
[label setTag:999];
}
然后在配置单元格时,使用[UIView viewWithTag:]获取标签的引用
UILabel *label = (UILabel *)[cell.contentView viewWithTag:999];
更新:
您应该为标记使用常量值。如果使用indexPath作为标记,则可能找不到该视图。由于您正在重复使用单元格,因此系统仅创建一定数量的单元格。当单元格不在视图范围内(不可见)时,dequeueReusableCellWithIdentifier
将为您获取单元格而不是创建新单元格。
reusableCell是您之前创建的视图。 您为标记使用动态值的情况将如下所示: 您在单元格10(indexPath),系统找到一个在3创建的reusableCell(indexPath)。由于它是在3处创建的,因此标签标签为3.但是您找到带有标签10的视图,因此结果为空。
答案 1 :(得分:1)
这是因为您没有正确重用表视图单元格。
您必须在以下代码块中创建标签
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}