我有一个异步图像加载器,可以在UIImageview中加载图像(JImage)。我想在tablecell中显示这些内容。显然我不能设置cell.imageView.image,因为我没有图像,我只是有一个视图。
如何将UIImageview设置为tablecell?但是,cell.backgroundView可以工作,但它可以覆盖整个单元格。
JImage代码是:
NSURL *theUrl=[NSURL URLWithString:imageURL];
JImage *photoImage=[[JImage alloc] init];
[photoImage initWithImageAtURL:theUrl];
[photoImage setContentMode:UIViewContentModeRedraw];
[photoImage setFrame:CGRectMake(0.0f, 0.0f, 40.0f, 65.0f)];
cell.backgroundView = photoImage;
[photoImage release];
在JImage.m中:
- (void)connectionDidFinishLoading:(NSURLConnection*)theConnection
{
[self setImage:[UIImage imageWithData: data]];
}
答案 0 :(得分:1)
如果您只想异步加载图像,则无需使用JImage。一个简单的方法是使用GCD和块,如下所示:https://github.com/ChrisTec/iPhone-Book-CodeSamples/blob/master/Chapter%2013/RealEstateViewer%2013.2.5/RealEstateViewer/ImageTableViewController.m
以下是我共同撰写的Objective-C Fundamentals一书的示例章节,深入解释了这段代码:http://www.manning.com/fairbairn/OCF_sample_ch13.pdf
总结一下:当请求单元格时,您会查看是否已经下载了图像。如果有,则显示它。如果没有,则显示微调器并启动将获取图像的异步GCD块。一个块完成后,它将在主线程上运行另一个块,用于将微调器切换为图像。就是这样。
答案 1 :(得分:1)
使用此代码并根据需要设置框架。
UIImage *imagearrow = [UIImage imageNamed:@"arrow.png"];
UIImageView *imgarrow=[[UIImageView alloc] initWithFrame:CGRectMake(290, 25, 7, 15)];
imgarrow.image =imagearrow;
[cell addSubview:imgarrow];
[imagearrow release];
答案 2 :(得分:0)
我认为你应该对此采取不同的方法。不要将JImage放在单元格中,而是将其放在视图控制器中的其他位置,NSArray
通常很方便。然后使用占位符图像填充单元格,或者将它们留空。
因此,假设您有一个正在加载所有JImages的数组,当数组位置x中的JImage完成加载时,您将重新加载该特定单元格,如下所示:
NSIndexPath indexPath = [NSIndexPath indexPathForRow:x inSection:0];
[self.tableView reloadRowsAtIndexPaths:x withRowAnimation:NO];
在你的cellForRow:AtIndexPath
中,你只需要从数组中保存的JImage对象中获取图像。
我希望这有助于你