如何在表格视图单元格上加载不同的图片

4
在第一个视图中,我们有一个名为A的按钮,点击可以将图片保存到文档目录中,然后我们有第二个视图B。我们需要在表格的特定单元格上传这张图片。在下面的代码中,我试图根据用户电子邮件地址来比较图片。在两个视图中,电子邮件是共同的。我该如何区分不同用户并在他们的表格视图单元格上以不同的方式显示他们的图片呢?但我无法做到这一点....如何在iOS中实现?请帮忙解决...我想分享一下我用于在文档目录中保存和加载图像的代码: enter code here 视图A:
-(void)saveImage: (UIImage*)image
{
    if (image != nil)
    {
        NSArray *paths =  NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString* path = [documentsDirectory stringByAppendingPathComponent:
                              @"iosImage.png" ];
        NSString *fileName = [path stringByAppendingFormat:email];
        NSLog(@"The result of Concatenate String =%@",fileName);
        NSData* data = UIImagePNGRepresentation(image);
                  [data writeToFile:path atomically:YES];
        NSLog(@"The Path of the directory %@",path);
    }
}

View B

- (UIImage*)loadImage
{
    NSLog(@"Email^^^^^^^^^%@",imgEmail);
    NSError *error;
    NSFileManager *fileMgr = [NSFileManager defaultManager];
    NSArray *paths =        NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString* path = [documentsDirectory stringByAppendingPathComponent:
                          @"iosImage.png" ];
    UIImage* image = [UIImage imageWithContentsOfFile:path];
    NSLog(@"Documents directory: %@",[fileMgr     contentsOfDirectoryAtPath:documentsDirectory error:&error]);
    return image;
}

你想在视图B中显示已经下载到文档目录中的相同图片吗? - Jatin Patel - JP
是的...我想在按钮点击时显示我保存的相同图像..@无 - Nisha Gupta
我认为如果你在获取响应,则响应包含唯一的用户ID和电子邮件? - Jatin Patel - JP
@NishaGupta,您可以对电子邮件ID进行加密,并将其用作文件名。请查看http://chat.stackoverflow.com/rooms/81630/how-to-load-different-images-on-table-view-cell您可以在那里提出您的问题。 - Sujay
@Sujay...先生,我没有理解您的意思。 - Nisha Gupta
显示剩余2条评论
4个回答

2
您可以根据以下方式修改saveImageloadImage函数。
-(void)saveImage: (UIImage*)image filePath:(NSString*)fileNameEmail
{
     if (image != nil)
     {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:fileNameEmail];

        NSData* data = UIImagePNGRepresentation(image);
              [data writeToFile:filePath atomically:YES];

     }
}

- (UIImage*)loadImage:(NSString*)fileNameEmail
{
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
     NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:fileNameEmail];
     UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath];
     return image;
}

编辑:您可以像下面这样获取特定的图像。

-(UITableViewCell *)tableView:(UITableView *)tableView  cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    cell.youimageview.image = [self loadImage:[[yourArray indexOfObject:indexPath.row] valueForKey:@"youemailkey"]];
    return cell;
}

希望这能对你有所帮助。


你可以像这样调用:[self saveImage:yourImageObject filePath:email]; - Jatin Patel - JP
首先,请确认您是否能够成功地将图像下载到文档目录中? - Jatin Patel - JP
通过这样做,图像将显示在所有表格单元格上。我想要它在特定的单元格@None上... - Nisha Gupta
请问您能告诉我如何做到这一点吗? - Nisha Gupta
@None,你有点错了。电子邮件ID总是包含点(.),所以她不能保存带有多个点(.)的图像文件。因此,她需要使用唯一的用户名。 - Sujay
显示剩余23条评论

1
如果您在文档目录中保存了不同的图像,但在加载到表格视图单元格时只显示一个图像,则只需在设置新图像之前将图像视图的图像设置为Nil,如下所示:
cell.imageView.image = Nil;

0
通过使用以下代码,我们可以异步地将图像粘贴到表视图单元格上。
NSString *imageName=[NSString stringWithFormat:@"%@.png",d.emailId];

UIImage *image = [self loadImage:imageName];  
if (image==nil)
{
    [imgProfilePic setImage:[UIImage imageNamed:@"userEdit.png"]];
}
else
{
    [imgProfilePic setImage:image];
}
photos =image;

NSLog(@"^^^^^^^^^^^^^^%@",photos);

[cell.contentView addSubview:imgProfilePic];

0

你也可以这样使用,

-(NSString *)ImageString{

    NSData *imgdata = UIImageJPEGRepresentation(self.imgView.image, 0.5);
    NSString *imagename =[self generateImageName];

    NSFileManager *fileManager = [NSFileManager defaultManager];
    [fileManager createFileAtPath:[NSString stringWithFormat:@"%@/%@",   DOCUMENTS_FOLDER,imagename]
                         contents:imgdata
                       attributes:nil];
    return imagename;

    }
       -(NSString *)generateImageName{

        int timestamp = [[NSDate date] timeIntervalSince1970];
        NSString *StrImage = [NSString stringWithFormat:@"Image_%d.png",timestamp];
        NSLog(@"image name=%@",StrImage);
        return StrImage;
    }

在头文件中定义如下:

#define DOCUMENTS_FOLDER [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接