在UITableView上显示图像的正确方法?

时间:2013-06-05 16:31:53

标签: ios uitableview uiimage tablecell

我正在开发一个应用程序,它从3个不同的共享日历中获取事件,并在UITableView中按日期显示它们。 第一个日历用于"电视上显示的体育" 第二个日历用于"舞台上的现场音乐" 第三个日历用于固定事件(如每个星期四是"女士之夜")

我想在单元格上显示一个小图像,图像需要根据事件进行更改。我现在的做法是在事件描述中编写图像文件名,然后使用它来设置图像。

cell.imageView.image = [UIImage imageNamed:[entry valueForKeyPath:@"content.$t"]];

我想要做的是根据日历名称或事件标题的内容设置图像

我试过

NSArray *gdWho = entry[@"gd$who"];
NSString *calendar = gdWho[0][@"valueString"];
if([calendar isEqualToString:@"Live Music on Stage"])
{
    cell.imageView.image = [UIImage imageNamed:@"music-notes-40x40.jpg"];
}

它可以工作,但是一旦我滚动表格,他们就会混淆起来。我在某处读到这是预期的结果,因为滚动时单元格索引路径会发生变化,从而导致我的代码无法使用。

但是你会怎么做呢。任何人都可以指出我正确的方向 - 我真的希望能够在舞台上播放艺术家的现场图像,所以我的最佳解决方案是在NSString = [entry valueForKeyPath:@"title.$t"]包含的情况下显示图像姓名"丹尼斯"

1 个答案:

答案 0 :(得分:3)

  

它有效,但只要我滚动表格就会混淆

这表示UITableViewCell“回收”存在问题。您需要更改tableview:cellforrowatindexpath:的代码,使其无条件地设置cell.imageView.image,而不仅仅是第一次创建单元格时。

此外,您可以使用字典中的查找替换检查if各种特定值的calendar语句链,如下所示:

// This code goes into your viewDidLoad method. imageForCalendarType is an ivar
imageForCalendarType = @{
    @"Live Music on Stage" : [UIImage imageNamed:@"music-notes-40x40.jpg"]
,   @"Sports Shown on TV"  : [UIImage imageNamed:@"sport-tv-40x40.jpg"]
,   @"Fixed Event"         : [UIImage imageNamed:@"fixed-40x40.jpg"]
};

现在您可以使用字典中的图像,如下所示:

// This goes into your tableview:cellforrowatindexpath: method
cell.imageView.image = imageForCalendarType[calendar];