我的应用程序包含3个视图(视图1(Tableview1),视图2(Tableview2),视图3(DetailView))。
我在View 2(Tableview2)中设置了一个带有子视图(imageViews和Labels)的自定义tableview单元格。
其中一个子视图是ImageView,如果单元格ID位于收藏夹数组中,则包含图像。当您选择cellForRowAtIndexpath时,您将被推送到新视图(View 3(DetailView)),您可以在其中按下按钮并使该项目成为收藏夹。 当您关闭该视图并返回时,将显示图像,一切正常。
当我尝试取消选择一个项目作为收藏时,我的问题就出现了。最喜欢的符号仍显示在tableView中,直到我返回到View 1(Tableview1)。
我试图在ViewWillAppear的View 2中调用[myTableview reloadData],但收藏夹符号仍然存在。我的收藏夹数据已保存并加载了正确的值。
在ViewWillAppear ...
中更新数组可能是什么问题?
相关代码:编辑 - 发布了来自cellForRowAtIndexPath的所有相关代码:一切都显示正确,但如果我从自定义单元格中删除图像,则表格视图不会更新...编辑:在for循环中使用else语句更新尝试从不再位于收藏夹数组中的项目中删除收藏夹图像。 编辑编辑编辑:现在工作,在我的for循环中添加了一个break语句...更新了代码,以便它可以帮助其他人......
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
CustomCell *cell = (CustomCell *)[myTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
[cell setAccessoryType: UITableViewCellAccessoryDisclosureIndicator];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *kategori = [prefs objectForKey:@"kategoriID"];
NSLog(@"KategoriID = %@", kategori);
rowArray = nil;
rowArray = [[NSMutableArray alloc] init];
for(int i=0; i < [listOfItems count]; i++) {
if([kategori isEqualToString:[listOfItems objectAtIndex:i]])
{
//Tilføjer ID
[rowArray addObject:[NSNumber numberWithInt:i-5]];
}
}
int arrayValue = [[rowArray objectAtIndex:indexPath.row] intValue];
cell.primaryLabel.text = [listOfItems objectAtIndex:arrayValue+1];
cell.secondaryLabel.text = [listOfItems objectAtIndex:arrayValue+2];
cell.myImageView.image = [UIImage imageNamed:[listOfItems objectAtIndex:arrayValue+4]];
//Time
cell.timeImageView.image = [UIImage imageNamed:@"03-clock.png"];
cell.timeLabel.text = [listOfItems objectAtIndex:arrayValue+6];
//Views
cell.viewsImageView.image = [UIImage imageNamed:@"04-eye.png"];
cell.viewsLabel.text = [listOfItems objectAtIndex:arrayValue+7];
//Stars
NSString *starsString = [listOfItems objectAtIndex:arrayValue+8];
if ([starsString isEqualToString:@"S0"]) {
cell.starsImageView.image = [UIImage imageNamed:@"0-stars.png"];
}
if ([starsString isEqualToString:@"S0_1"]) {
cell.starsImageView.image = [UIImage imageNamed:@"0_1-stars.png"];
}
if ([starsString isEqualToString:@"S1"]) {
cell.starsImageView.image = [UIImage imageNamed:@"1-stars.png"];
}
if ([starsString isEqualToString:@"S1_1"]) {
cell.starsImageView.image = [UIImage imageNamed:@"1_1-stars.png"];
}
if ([starsString isEqualToString:@"S2"]) {
cell.starsImageView.image = [UIImage imageNamed:@"2-stars.png"];
}
if ([starsString isEqualToString:@"S2_1"]) {
cell.starsImageView.image = [UIImage imageNamed:@"2_1-stars.png"];
}
if ([starsString isEqualToString:@"S3"]) {
cell.starsImageView.image = [UIImage imageNamed:@"3-stars.png"];
}
if ([starsString isEqualToString:@"S3_1"]) {
cell.starsImageView.image = [UIImage imageNamed:@"3_1-stars.png"];
}
if ([starsString isEqualToString:@"S4"]) {
cell.starsImageView.image = [UIImage imageNamed:@"4-stars.png"];
}
if ([starsString isEqualToString:@"S4_1"]) {
cell.starsImageView.image = [UIImage imageNamed:@"4_1-stars.png"];
}
if ([starsString isEqualToString:@"S5"]) {
cell.starsImageView.image = [UIImage imageNamed:@"5-stars.png"];
}
//favorite
NSString *IDString = [listOfItems objectAtIndex:arrayValue];
NSLog(@"ID String: %@", IDString);
if (videoerIFavoritDatabase == 0) {
NSLog(@"Der er ingen videoer i favorit databasen!");
}
else {
for(int i=0; i < [tableviewFavoritArray count]; i++) {
NSLog(@"ID Array Value:%i", i);
if([IDString isEqualToString:[tableviewFavoritArray objectAtIndex:i]])
{
cell.favoriteImageView.image = [UIImage imageNamed:@"favoriteTableview@2x.png"];
NSLog(@"ER favorit:%i = ID%@", i, [tableviewFavoritArray objectAtIndex:i]);
break;
}
else { cell.favoriteImageView.image = [UIImage imageNamed:@"empty.png"];
break;
}
}
}
return cell;
}
答案 0 :(得分:1)
您在if (cell == nil)
语句中执行所有单元格配置。仅当tableView未从dequeue方法返回单元格时,才会执行此代码。可能发生的是您正在重新使用单元格而它们未被配置,因此数据和外观保持不变。
您的cellForRowAtIndexPath
方法应具有以下结构:
if (cell == nil)
语句中的部分好的,根据您更新的代码,问题似乎是您设置收藏的图片,但如果单元格为no,则不会取消更喜欢的。如果单元格不是最喜欢的,则需要else
将该图像设置为nil。