我是iPhone编程的新手。我想将图像加载到UITableView。我的图片来自网络。我知道我必须使用ASIHttp Request
,然后将图像加载到UITableview。但是,如果我这样做,那么直到它的加载图像UITableview挂起。
如果我使用异步图像加载块,那么每次Cell==nil
或重用请求佣人时,我都不想这样做。
我在Tableview cellForRowAtIndexpath
中使用的代码行。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"CellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UIImageView *imgViewCellBg;
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.accessoryType=UITableViewCellAccessoryNone;
imgViewCellBg = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,151)];
imgViewCellBg.userInteractionEnabled = NO;
imgViewCellBg.backgroundColor = [UIColor whiteColor];
imgViewCellBg.tag = 10000;
[cell.contentView addSubview:imgViewCellBg];
[imgViewCellBg release];
}
else{
imgViewCellBg = (UIImageView *)[cell.contentView viewWithTag:10000];
}
//-------------------------------- For the image Downloding And Displaying ------
__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:(MY Url)]];
[request setCompletionBlock:^{
// NSLog(@"Image downloaded.");
NSData *data = [request responseData];
UIImage *imageCountry = [[UIImage alloc] initWithData:data];
[imgViewCellBg setImage:imageCountry];
imageCountry = Nil;
}];
[request setFailedBlock:^{
NSError *error = [request error];
NSLog(@"Error downloading image: %@", error.localizedDescription);
}];
[request startAsynchronous];
//-----------------------------------------------------------------
return cell;
答案 0 :(得分:1)
只需添加https://github.com/SIMHAM/AsyncImageView-1
中的AsyncImageView文件即可然后你可以在你的单元格中添加imageView,如下所示:
AsyncImageView *asyncImageView=[[AsyncImageView alloc] initWithFrame:CGRectMake(15,20,80.0f,110.0f)];
[asyncImageView loadImageFromURL:[NSURL URLWithString:yourImageUrl]];
[cell.contentView addSubview:asyncImageView];
答案 1 :(得分:1)
根据我的建议,我使用SDWebImages A Link of GitHubproject
进行异步操作我将此配置如下: -
注意: - 请不要选中复制选项
现在点击你的xcode中的项目名称来构建阶段: - > target dependencies: - >点击+按钮添加SDWebimage ARC
现在选择链接二进制文件库点击+按钮添加libSDWebimageARC.a并再次单击+并添加imageIO.framework并添加libxml2.dylib就可以了
转到构建设置: - >其他链接标记: - >添加-ObjC
和标题搜索路径添加这三项
1 / usr / include / libxml2
2“$(OBJROOT)/ UninstalledProducts / include”
3“$(TARGET_BUILD_DIR)/ usr / local / lib / include”
now build and run its working like smoothly cheers.... :)
这对于加载图像及其商店捕获来说更加简单和非常有用,因此您可以更快地完成工作。
你可以只用两行代码来实现异步图像,比如
在.m
: -
#import <SDWebImage/UIImageView+WebCache.h>
NSString *strUrlSting =[d valueForKey:@"Current_RequestUser_Image"];
strUrlSting =[strUrlSting stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSURL* url = [NSURL URLWithString:strUrlSting];
[imgView_user1 setImageWithURL:url
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
答案 2 :(得分:1)
这是AysncImageView
的示例,您可以从AynchImageView with Example
您可以像下面的代码一样访问此类。
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"ImageCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc]
initWithFrame:CGRectZero reuseIdentifier:CellIdentifier]
autorelease];
} else {
AsyncImageView* oldImage = (AsyncImageView*)
[cell.contentView viewWithTag:999];
[oldImage removeFromSuperview];
}
CGRect frame;
frame.size.width=75; frame.size.height=75;
frame.origin.x=0; frame.origin.y=0;
AsyncImageView* asyncImage = [[[AsyncImageView alloc]
initWithFrame:frame] autorelease];
asyncImage.tag = 999;
NSURL* url = [imageDownload
thumbnailURLAtIndex:indexPath.row];
[asyncImage loadImageFromURL:url];
[cell.contentView addSubview:asyncImage];
return cell;
}
我希望这对你有所帮助。