这是我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifierNormal = @"CellNormal";
static NSString *CellIdentifierTracking = @"CellTracking";
switch (self.mapState) {
case MapStateNormal:
{
// UITableViewCell *cell = [self.table dequeueReusableCellWithIdentifier:CellIdentifierNormal];
// if (cell == nil) {
UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifierNormal];
// }
[cell.textLabel setText:@"abc"];
return cell;
}
case MapStateTracking:
{
// UITableViewCell *cell = [self.table dequeueReusableCellWithIdentifier:CellIdentifierTracking];
// if (cell == nil) {
UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifierTracking];
// }
if (indexPath.row == 0) {
[cell.textLabel setText:@"Lorem ipsum"];
} else {
NSURL *url = [LoremIpsum URLForPlaceholderImageFromService:LoremIpsumPlaceholderImageServicePlaceKittenCom
withWidth:1024
height:1024];
[cell.imageView setImageWithURL:url
placeholderImage:[UIImage imageNamed:@"MenuButton"]];
}
return cell;
}
default:
break;
}
return nil;
}
这段代码工作得很好但不是最佳实践,因为我每次都会重新创建UITableViewCell
。它显示如下:
但是,当我取消注释上面的这些行以启用dequeueReusableCell
时,表格会显示其单元格,如下所示(黄色部分是我的代码):
您可以看到第一行中有UIImage
,下面某些行中有文字,但我显然没有在我的代码中设置它。
我该怎么做才能解决这个问题?还是应该坚持使用第一种方法?
感谢。
答案 0 :(得分:6)
您应该重新使用表格视图单元格,因为如果您一直重新创建它们会产生大量开销,即输出的注释代码是正确的。
接下来,docs说:" tableView:cellForRowAtIndexPath:
中的表格视图代表应该在重复使用单元格时重置所有内容。"
如果您不重置内容,它将再次显示
所以我建议你设置
cell.imageView.image = nil;
在-(UITableViewCell *)tableView:cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法中。
答案 1 :(得分:1)
只需为每个单元格设置[cell.textLabel setText:@""];
,您不想显示任何文本。单元格与之前的文本一起使用,因此您需要清除它。
答案 2 :(得分:1)
尝试此操作,清除单元格cell != nil
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifierNormal = @"CellNormal";
static NSString *CellIdentifierTracking = @"CellTracking";
switch (self.mapState) {
case MapStateNormal:
{
UITableViewCell *cell = [self.table dequeueReusableCellWithIdentifier:CellIdentifierNormal];
if (cell == nil) {
UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifierNormal];
} else {
[cell.textLabel setText:@""];
[cell.imageView setImage:nil];
}
...
return cell;
}
case MapStateTracking:
{
UITableViewCell *cell = [self.table dequeueReusableCellWithIdentifier:CellIdentifierTracking];
if (cell == nil) {
UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifierTracking];
} else {
[cell.textLabel setText:@""];
[cell.imageView setImage:nil];
}
....
return cell;
}
default:
break;
}
return nil;
}