我正在开发一个应用程序,它从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"]
包含的情况下显示图像姓名"丹尼斯"
答案 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];