将UIImageView添加到Tableview

时间:2011-09-07 12:51:09

标签: iphone uitableview uiimageview

我有一个异步图像加载器,可以在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]]; 
}

3 个答案:

答案 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对象中获取图像。

我希望这有助于你