如何从手机图库向UITableView添加图像

时间:2016-08-04 07:53:21

标签: ios objective-c uitableview uiimage

我在storyboard PrintService.printElement中创建了原型单元格,TableViewController和UITableView。现在我想从电话库中选择所有图片并将一个或多个保存到数据库中。但此时我需要实现向tableview添加图片。我是iOS的初学者。谁能告诉我怎么能这样做?给我一个链接或代码?谢谢你提前

2 个答案:

答案 0 :(得分:2)

您可以使用ALAssetsLibrary中的AssetsLibrary framework来获取手机图库中的所有图片。将每个图像保存到数组中。

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

void (^assetEnumerator)( ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {

    if(result != nil) {

        if([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) {

            NSURL *url= (NSURL*) [[result defaultRepresentation] url];
            [library assetForURL:url
                     resultBlock:^(ALAsset *asset) {
                         UIImage *img = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]];
                         [imgArray addbject:img];
                     }
                    failureBlock:^(NSError *error){ NSLog(@"operation failed"); } ];
        }
    }
};

然后您可以使用此数组保存到DB或在tableview中显示。 对于在TableView中使用,您需要在原型单元格中添加UIImageView,然后相应地将数组中的图像设置为单元格。您的表视图委托方法如下所示。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [imgArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    CellId = @"ImageCell";
    CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellId];
    if (cell == nil) {
      cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellId];
    }
    UIImage *img = [imgArray objectAtIndex:indexPath.row];
    cell.imgView.image = img;
    return cell;
}

答案 1 :(得分:1)

如果要从图库中选择图像并将其显示到tableview,可以在tableView或CustomCell中使用Custom ImageView imageView

首先,您需要从图库中选择图像并将其保存到数组

之前在viewDidLoad方法中分配和初始化数组

ViewController.m

#import "ViewController.h"

@interface ViewController ()
{
  NSMutableArray *arrayImage;
}

@end

@implementation ViewController

- (void)viewDidLoad
{
      [super viewDidLoad];
      arrayImage = [[NSMutableArray alloc]init];
}

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
  UIImage *image=[info objectForKey:@"UIImagePickerControllerOriginalImage"];
  imageView.image=image;
  [arrayImage addObject:image];
  picker.delegate =self;
  [picker dismissViewControllerAnimated:YES completion:nil];
}

然后在tableView

如果您使用CustomCell

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"cell"];
  if(cell==nil)
  {
    NSArray *nib = [[NSBundle mainBundle]loadNibNamed:@"CustomTableViewCell" owner:self options:nil];
    cell = nib[0];
  }
 cell.galleryImageView.image = [arrayImage objectAtIndex:indexPath.row];
 return  cell;
}

如果使用默认表格视图单元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *strCell = @"cell";
   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:strCell];
   if (cell == nil)
   {
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:strCell];
   }
   cell.imageView.image = [arrayImage objectAtIndex:indexPath.row];
   return cell;
}