0

我正在开发一个应用程序,它从 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"]包含例如名称“dennis” ,则显示图像

4

1 回答 1

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];
于 2013-06-05T16:36:07.447 回答