【问题标题】:UITableView with different cells "behavior"具有不同单元格“行为”的 UITableView
【发布时间】:2011-07-08 15:56:49
【问题描述】:

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

下面是我用于表格视图单元格的代码:

- (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 个不同的单元格来为每个箭头提供直角的任何想法?!

谢谢

【问题讨论】:

  • 你能告诉我你是如何为 UIImageView 添加标题的吗?你可以在这里分享你的代码。我会尽快给你答复。
  • 你如何更新你的细胞?
  • 在表格视图的视图控制器中,我为 UIImageView 定义了一个属性,该属性将在设备更改其标题时立即更新。在上面的方法中,outlet 是通过 self.cellImageView = cell.imageView; 来初始化的。当设备更改其标题时,委托使用 CGAffineTransformMakeRotation(angle) 更新 imageView。

标签: iphone ios uitableview


【解决方案1】:

通过做:

self.cellImageView = cell.imageView.

您只为自己提供了对最后一个单元格的引用。每次配置单元格时,您的 cellImageView 变量都会更新为指向该单元格的图像视图,并且您会丢失对前一个单元格的图像视图的引用。

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

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

只有当您遇到 UI 明显变慢的问题时,您才应该担心做一些更聪明的事情。

【讨论】:

  • reloadData 是否执行 tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法?如果在这个方法中是这样,我可以调用一个函数来计算变换的角度,所以每次调用 reloadData 时都会调用该函数并更新图像。你觉得这样行吗?
  • 是的,它确实调用了该方法。因此,当位置/航向发生变化时,您只需调用reloadData,然后检查该索引路径的正确方向并适当地装配单元格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
相关资源
最近更新 更多