iphone在tableView中显示图像

时间:2012-01-12 10:57:19

标签: iphone image uitableview nsdata

您好我有这个代码从服务器下载图像,然后在表视图中显示一些文本(如果没有图像我想要显示文本):

//下载部分

NSMutableString *photourl=[[NSMutableString alloc] initWithString:url_image];
    [photourl appendString:[dic objectForKey:@"photo"]];

    @try{

      //add to mutable array
    [photoSmallImageData addObject:[NSData dataWithContentsOfURL:[NSURL URLWithString:photourl]]];
    }
    @catch (id Exception) {
        [photoSmallImageData addObject:[NSData dataWithContentsOfURL:[NSURL URLWithString:url_image]]];

    }

//表视图代码的一部分

NSData *imageData = [photoSmallImageData objectAtIndex:indexPath.row];

    @try {

        cell.imageView.image = [UIImage imageWithData:imageData];
    }
    @catch (NSException *exception) {
      cell.imageView.image = [UIImage imageNamed:@"icon72.png"];
    }
  1. 它有效,但事情有时没有图像,所以我想用一些图标替换它,但因为我们不能添加nil到数组我juste添加我的链接的一部分,然后即使链接没有不适用于图像数据,它不会调用catch方法。我不知道我是否可以如何用本地URL替换url,但我不知道如何。此外,我不能跳过这一步,因为那时图像将不对应于它旁边的文本。
  2. 2.图像都是不同的尺寸,我希望它们具有标准的外观并且居中有没有办法做到这一点以及代码的哪一点?非常感谢你

    编辑我找到了方法: dataWithContentsOfURL:选项:错误: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html 但我不知道如何使用它

1 个答案:

答案 0 :(得分:2)

为什么不在下载图像数据时创建图像并将它们保存在阵列中?此外,您正好在 dataWithContentsOfURL:options:error:方法之后。鉴于您将图像名称保留在 dic 字典中,代码将如下所示:

NSMutableString *photourl=[[NSMutableString alloc] initWithString:url_image];
[photourl appendString:[dic objectForKey:@"photo"]];

//try to create the image
NSError* err = nil;
UIImage* img = nil;
NSData* tempData = [NSData dataWithContentsOfURL:[NSURL URLWithString:photourl] options:NSDataReadingMappedIfSafe error:&err];
if (!err) {
    // image data loaded, create image
    img = [UIImage imageWithData:tempData];
} else {
    // image data could not be loaded, display error
    NSLog(@"%@", err);
    // put the default image in the array
    img = [UIImage imageNamed:@"icon72.png"];
}
[photoSmallImage addObject:img];

然后在表格视图中委托:

cell.imageView.image = [photoSmallImage objectAtIndex:indexPath.row];

关于问题的第二部分,您可能需要查看contentMode property of UIView class。默认值是要填充的比例。通过在cell.imageView上操作此属性,您可以实现所需的效果。