在我的iPhone应用程序中,我有一个UITableView
,它包含一个UIImageView,按钮和Label。我正在根据服务器的值更新我的数据库并更新tableview中的详细信息。如果我第二次运行该应用程序,在服务器上进行一些修改后,imageview将不会更新。按钮和标签正在更新。当我从数据库检查图像的本地路径时,它在文档文件夹中显示新图像,但表格单元格仍显示旧图像。要查看更新的图像,我应该重新安装该应用程序。我该怎么做才能解决这个问题?
以下是我所做工作的工作流程:
修改 //为表格视图创建自定义单元格以显示不同的对象
- (UIMenuItemCell *) getCellContentView:(NSString *)cellIdentifier {
CGRect CellFrame = CGRectMake(0, 0, 150, 60);
CGRect Label1Frame = CGRectMake(20, 23, 98, 30);
CGRect imgFrame = CGRectMake(20, 48, 110, 123);
CGRect btnFrame = CGRectMake(25, 136, 100, 30);
UILabel *lblTemp;
UIImageView *itemImg;
UIButton *itemBtn;
UIMenuItemCell *cell = [[UIMenuItemCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
cell.frame = CellFrame;
//Initialize Label with tag 1.
lblTemp = [[UILabel alloc] initWithFrame:Label1Frame];
lblTemp.tag = 1;
lblTemp.textColor=[UIColor colorWithRed:139.0f/255.0f green:69.0f/255.0f blue:19.0f/255.0f alpha:1.0f];
lblTemp.textAlignment = UITextAlignmentCenter;
lblTemp.backgroundColor = [UIColor clearColor];
lblTemp.font = [UIFont systemFontOfSize:13.0];
[cell.contentView addSubview:lblTemp];
[lblTemp release];
//Initialize ImageView
itemImg = [[UIImageView alloc]initWithFrame:imgFrame];
itemImg.tag = 2;
[cell.contentView addSubview:itemImg];
[itemImg release];
//Initialize Button
itemBtn = [[UIButton alloc]initWithFrame:btnFrame];
itemBtn.frame = btnFrame;
itemBtn.tag = 3;
itemBtn.titleLabel.textColor = [UIColor blueColor];
itemBtn.titleLabel.font = [UIFont systemFontOfSize:9.0];
[cell.contentView addSubview:itemBtn];
[itemBtn release];
return cell;
}
//自定义表格视图单元格的外观。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d", indexPath.row];
UIMenuItemCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil){
cell = [self getCellContentView:CellIdentifier];
cell.transform = CGAffineTransformMakeRotation(M_PI_2);
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.cellItemName = (UILabel *)[cell viewWithTag:1];
cell.cellitemImage = (UIImageView *)[cell viewWithTag:2];
cell.cellItemButton = (UIButton *)[cell viewWithTag:3];
DataBaseClass *itemObj = [appDelegate.itemArray objectAtIndex:indexPath.row];
NSString *imageLocalFilePath = nil;
if ([[tempitemStatusArray objectAtIndex:indexPath.row] isEqualToString:@"NotAvailable"]) {
cell.cellItemProgress.hidden = YES;
cell.cellItemButton.hidden = NO;
imageLocalFilePath = [NSString stringWithFormat:@"%@",[tempItemLocalNotAvailPath objectAtIndex:indexPath.row]];
NSString *date = [self changeDateFormat:itemObj.itemReleaseDate];
[cell.cellItemButton setTitle:date forState:UIControlStateNormal];
cell.cellItemButton.userInteractionEnabled = NO;
cell.userInteractionEnabled = NO;
[cell.cellItemButton removeTarget:nil action:NULL forControlEvents:UIControlEventAllEvents];
[cell.cellItemButton setBackgroundImage:[UIImage imageNamed:@"not_available_bttn_bck_img"] forState:UIControlStateNormal];
}else if ([[tempitemStatusArray objectAtIndex:indexPath.row] isEqualToString:@"Available"]){
cell.cellItemButton.userInteractionEnabled = YES;
cell.userInteractionEnabled = YES;
cell.cellItemProgress.hidden = YES;
[cell.cellItemButton setTitle:@"" forState:UIControlStateNormal];
[cell.cellItemButton setBackgroundImage:[UIImage imageNamed:@"available_bttn_img_normal"] forState:UIControlStateNormal];
[cell.cellItemButton setBackgroundImage:[UIImage imageNamed:@"available_bttn_img_pressed"] forState:UIControlStateHighlighted];
[cell.cellItemButton removeTarget:nil action:NULL forControlEvents:UIControlEventAllEvents];
[cell.cellItemButton addTarget:self action:@selector(confirmationAlert:) forControlEvents:UIControlEventTouchUpInside];
imageLocalFilePath = [NSString stringWithFormat:@"%@",[tempItemLocalAvailPath objectAtIndex:indexPath.row]];
}
if ([imageLocalFilePath isEqualToString:@""]) {
[cell.cellitemImage setImage:[UIImage imageNamed:@"item01.png"]];
}else {
[cell.cellitemImage setImageWithURL:[NSURL fileURLWithPath:imageLocalFilePath] placeholderImage:[UIImage imageNamed:@"item01.png"]];
}
cell.cellItemName.text = [NSString stringWithFormat:@"%@",[tempItemNameArray objectAtIndex:indexPath.row]];
}
return cell;
}
请帮忙。
答案 0 :(得分:3)
我在cellForRowAtIndexPath
方法中找到了设置图片的问题,我使用了代码
[cell.cellitemImage setImageWithURL:[NSURL fileURLWithPath:imageLocalFilePath] placeholderImage:[UIImage imageNamed:@"item01.png"]];
我使用外部类调用ImageLoading
来加载图像,并且这些类包含了一些缓存方法,并且导致了这个问题。所以我将该行更改为
[cell.cellitemImage setImage:[UIImage imageWithContentsOfFile:imageLocalFilePath]];
解决了这个问题。
感谢您的支持:)
答案 1 :(得分:0)
应该有一个
}
cell.cellItemButton = (UIButton *)[cell viewWithTag:3];
答案 2 :(得分:0)
我先看了一下你的代码,我发现了这个“错误”:
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d", indexPath.row];
所以...它不会给你任何错误,它有效...
但这违反了表的工作方式: 这样做是为数组/数据库的每个项目创建和分配一个新单元格, 意思是如果你需要滚动查看1.000项,你创建1.000单元格!!!
它应该不是这样的。
通常情况下,表格只会创建需要在屏幕/显示屏上显示的单元格
意思是如果你的表区域高度为300像素,每个单元格的高度为30像素, 那么你可能只需要11个单元格,你应该只使用/分配11个单元格,而不是1.000
单元格的神奇之处在于当用户将它们滚出屏幕(例如UP)时重复使用单元格,使用新项目数据设置数据和图像并将其再次放在屏幕上(例如DOWN)
这通常是CellIdentifier的用途,对于表中的所有单元格应该是相同的(至少如果所有单元格相似,但包含的数据,并且您不需要不同的单元格)
分配太多的单元格可能会给你带来内存问题,如果你管理的项目太多......
P.S。
我可能没有回答你的问题,你的代码中可能还有其他问题,因为我说我只是匆匆阅读它
答案 3 :(得分:-1)
您必须在从数据库加载数据和tableview重新加载之间保持一些时间延迟。然后,您将能够看到更新的图像。