用UITableView不知道的东西
问题描述:
我正在创建自定义表格视图单元格,但结果不正确。 我的代码:用UITableView不知道的东西
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary *currentComment = [comments objectAtIndex:indexPath.row];
static NSString *CellIdentifier = @"TitleCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
int commentLevel = [[currentComment objectForKey:@"level"] intValue];
NSString *commentText = [currentComment objectForKey:@"text"];
UILabel *titleLabel = [[UILabel alloc] init];
titleLabel.numberOfLines = 0;
[titleLabel setFont:[UIFont fontWithName:@"Verdana" size:17.0]];
titleLabel.lineBreakMode = UILineBreakModeWordWrap;
CGSize textSize;
if (commentLevel == 0) {
textSize = [commentText sizeWithFont:titleLabel.font constrainedToSize:CGSizeMake(310, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap];
titleLabel.frame = CGRectMake(5, 5, textSize.width, textSize.height);
} else {
textSize = [commentText sizeWithFont:titleLabel.font constrainedToSize:CGSizeMake((305-10*commentLevel), FLT_MAX) lineBreakMode:UILineBreakModeWordWrap];
titleLabel.frame = CGRectMake(15 + 10*commentLevel, 5, textSize.width, textSize.height);
UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"06-arrow-northwest"]];
img.frame = CGRectMake(5, 5, 15, 15);
[cell.contentView addSubview:img];
}
titleLabel.text = commentText;
[cell.contentView addSubview:titleLabel];
return cell;
}
- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSDictionary *currentComment = [comments objectAtIndex:indexPath.row];
int commentLevel = [[currentComment objectForKey:@"level"] intValue];
NSString *text = [currentComment objectForKey:@"text"];
CGSize size;
if (commentLevel == 0) {
size = [text sizeWithFont:[UIFont fontWithName:@"Verdana" size:17.0] constrainedToSize:CGSizeMake(310, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap];
} else {
size = [text sizeWithFont:[UIFont fontWithName:@"Verdana" size:17.0] constrainedToSize:CGSizeMake((305-10*commentLevel), FLT_MAX) lineBreakMode:UILineBreakModeWordWrap];
}
float height = size.height;
height = height + 40;
return height;
}
结果: 它的屏幕截图,UITableView中加载时:
,但如果这种细胞变得不可见,并在其后可见效果不好:
我的错误在哪里?
答
您正在重复使用单元格,因此它们添加了img和titleLabel。您在同一个单元格中添加更多子视图。 在添加新单元格之前,您可以删除重用单元格中的titleLabel和img。为此,您可以在两个视图上设置标签值。例如,你可以写:
titleLabel.tag = 0xff ;
和
img.tag = 0xfe ;
然后,当你重复使用电池:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
} else {
[[cell viewWithTag:0xff] removeFromSuperview];
[[cell viewWithTag:0xfe] removeFromSuperview];
}