UITableView具有不同的单元格“行为”

时间:2011-07-08 15:56:49

标签: iphone ios uitableview

我正在开发一个位置感知应用程序作为大学的项目,其中一个开发功能包括显示最接近用户的前五个兴趣点。我正在使用一个表格视图,其单元格样式是UITableViewCellStyleSubtitle。我遇到了一些问题,因为除了单元格的标题和副标题之外,我正在使用图像(箭头)来显示用户应该遵循的方向来达到POI。一旦设备的标题/位置改变,该图像应该旋转。问题是只有表格视图的最后一行有效,主要问题是我不知道如何使用五个不同的单元格,因为每个POI可以有不同的位置而不是设备的位置,因此每个单元格的图像应该独立旋转。 我报告一张图片,以便更好地了解我的问题。

TableView

下面是我用于tableview单元格的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *tableIdentifier = @"tableIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tableIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:tableIdentifier] autorelease];
    }

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.textLabel.backgroundColor = [UIColor clearColor];
    cell.detailTextLabel.backgroundColor = [UIColor clearColor];

    NSUInteger row = [indexPath row];


    cell.detailTextLabel.text = [NSString stringWithFormat:@"Distance: %.3f Km",[...];

    UIImage *cellImage = [UIImage imageNamed:@"arrow.png"];
    cell.imageView.image = cellImage;
    self.cellImageView = cell.imageView;

    return cell;
}

如何使用5个不同的细胞来为每个箭头提供直角的任何想法?!

由于

1 个答案:

答案 0 :(得分:2)

通过做:

self.cellImageView = cell.imageView

您只给出了最后一个细胞的参考。每次配置单元格时,cellImageView变量都会更新为指向该单元格的图像视图,并且您将丢失对前一个单元格图像视图的引用。

因此,解决问题的一种方法是在单元格中累积单元格图像视图。只需确保将图像视图与适当的位置匹配;当tableview显示时,可以重复使用单元格。但是tableview拥有这些单元格并且可能会混淆它们,但是它需要用于缓存目的(因此重用标识符)。

更好的方法是与tableview合作,让它知道什么时候需要改变。忘记你的ivar,只需在单元配置期间设置正确的标题。需要更改单元格的标题?告诉tableview重新加载该单元格。需要更改所有细胞的标题?只需致电[[self tableView] reloadData]

只有当您遇到明显的UI减速问题时,您才会担心做一些更聪明的事情。