2

我是 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;
4

3 回答 3

1

这是一个例子,你可以从AynchImageViewAysncImageView下载这个类和例子

您可以像下面的代码一样访问此类。

- (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;
    }

我希望这对你有帮助。

于 2012-10-18T05:32:40.383 回答
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];
于 2012-10-18T05:20:09.823 回答
1

根据我的建议,我正在使用 SDWebImages A Link of GitHubproject进行异步操作

我按照以下步骤进行配置:-

  • 您需要首先右键单击您的项目名称:-> 将文件添加到您的项目-> 选择 SDWebImageproject 并添加它们

注意:- 请不要检查复制选项

  • 现在单击您的 xcode 中的项目名称,以构建阶段:-> 目标依赖项:-> 单击 + 按钮并添加 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"]];
于 2012-10-18T05:22:41.007 回答