伙计们,我有UITableView的一些图像,从互联网加载。图像很少,但我的tableview不是很完美。 我的代码:
static NSString *CellIdentifier = @"Cell";
TDBadgedCell *cell = [[[TDBadgedCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.badgeColor = [UIColor colorWithRed:((float)128 / 255.0f) green:((float)161 / 255.0f) blue:((float)176 / 255.0f) alpha:1];
NSDictionary *dict = nil;
if (searching == NO) {
dict = [companies objectAtIndex:indexPath.row];
} else {
dict = [copyListOfItems objectAtIndex:indexPath.row];
}
cell.badgeString = [NSString stringWithFormat:@"%@",[dict objectForKey:@"rating"]];
cell.textLabel.numberOfLines = 2;
cell.textLabel.text = [dict objectForKey:@"title"];
cell.textLabel.textColor = [UIColor colorWithRed:((float)80 / 255.0f) green:((float)80 / 255.0f) blue:((float)80 / 255.0f) alpha:1];
cell.textLabel.font = [UIFont fontWithName:@"Verdana" size:17.0];
UIImage *img = [[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[dict objectForKey:@"image"]]]] scaleToFitSize:CGSizeMake(16, 16)];
cell.imageView.image = img;
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
return cell;
TDBadgedCell不能成为理由,因为没有图像它完美无缺。 我正在使用开放式课程来调整UIImage的大小。你可以找到它here。
你有什么想法吗?
答案 0 :(得分:2)
您可以在另一个线程中执行图像下载部分,这样就不会阻止主要部分。你可以这样做:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul), ^{
// download the images here
dispatch_async(dispatch_get_main_queue(), ^{
// add them to your cell here
});
});
因此,您需要切换到另一个线程进行下载,然后返回主线程并将其添加到UI。 UI元素只能在主线程中处理。
答案 1 :(得分:0)
我已发布代码,告诉您处理此问题。我们有一个MyImageDownloader类,可以根据请求下载图像并在到达时发布通知:
如果MyImageDownloader没有图像,表视图数据源会提供占位符,如果有图像,则提供图像:
因此,我们所要做的就是在图像到达时重新加载表格。米。