如何在Objective c中将捕获图像添加到UITableView

Posted

技术标签:

【中文标题】如何在Objective c中将捕获图像添加到UITableView【英文标题】:How to add Capture Image to UITableView in Objective c 【发布时间】:2017-02-08 06:17:31 【问题描述】:

我是 ios 新手,我在通过 Image Picker 在 UITableView 中设置图像时遇到问题。

我的代码是这样的

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo

    CGSize newSizeClient=CGSizeMake(200,200); // I am giving resolution 50*50 , you can change your need
    UIGraphicsBeginImageContext(newSizeClient);
    [image drawInRect:CGRectMake(0, 0, newSizeClient.width, newSizeClient.height)];
    UIImage* newImageClient = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    captureimg.image = newImageClient;

    [imageArray replaceObjectAtIndex:index withObject:captureimg.image];

    dispatch_async(dispatch_get_main_queue(), ^
        [Audittable reloadData];
    );

    NSData *imgData = [[NSData alloc] initWithData:UIImageJPEGRepresentation((newImageClient), 0.5)];
    OCSSignString = [imgData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

    [picker dismissModalViewControllerAnimated:YES];

    imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 30,40,40)];
    UIImage *wonImage = captureimg.image;
    imageView.contentMode=UIViewContentModeCenter;
    [imageView setImage:wonImage];


在单元格中为RowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

      cell.Photobtn.tag=indexPath.row;
[cell.Photobtn addTarget:self action:@selector(btnphotoClick:) forControlEvents:UIControlEventTouchUpInside];  
  cell.CaptureImage.image = [imageArray objectAtIndex:indexPath.row];

我面临的问题是它没有像图像中那样根据行设置

我是根据tableviewcell来抓图的

-(void)btnphotoClick:(UIButton *)sender

     AuditNextTableViewCell *cell = sender.superview.superview;


    imageArray =[[NSMutableArray alloc]init];
    for (int i=0; i<idarray.count; i++) 
        [imageArray addObject:[UIImage new]];
    

    index=sender.tag;

    if (! [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 

        UIAlertView *deviceNotFoundAlert = [[UIAlertView alloc] initWithTitle:@"No Device" message:@"Camera is not available"
                                                                     delegate:nil
                                                            cancelButtonTitle:@"Okay"
                                                            otherButtonTitles:nil];
        [deviceNotFoundAlert show];
    
    else
    
        UIImagePickerController *cameraPicker = [[UIImagePickerController alloc] init];
        cameraPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
        cameraPicker.delegate =self;
        [self presentViewController:cameraPicker animated:YES completion:nil];
    

我面临的问题是它正在克服仪式。在此先感谢!

【问题讨论】:

这里的 idArray 是什么? 为什么你要替换数组对象? @User511 idArray 来自服务器。 尝试添加对象而不是替换对象。或者您设置了任何占位符图像? @User511 将其添加到 tableview。 【参考方案1】:

问题出在您的按钮操作中,您每次都用空的UIImage 对象初始化您的imageArray。从您的按钮操作中删除此代码。

imageArray = [[NSMutableArray alloc]init];
for (int i=0; i<idarray.count; i++) 
    [imageArray addObject:[UIImage new]];

当您第一次加载您的tableView 时,您只需使用空的UIImage 对象初始化您的imageArray 一次。

【讨论】:

@Muju 因为您只是删除了代码,我告诉您的是您需要从按钮操作中删除此代码并将其放置在您重新加载 tableView 或您设置的位置idarray. 好的。我会这样做的。 是检查。实际上我正在通过 TestFlight 在设备上检查它,这就是为什么我需要一些时间。【参考方案2】:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
   
      BookingCell *cell=(BookingCell*)[self.tablebview cellForRowAtIndexPath:indexPath];
      cell.CaptureImage.image = image;
   

  -(IBAction)buttonclick:(id)sender
   
      CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
      NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
   

【讨论】:

它选择的按钮索引路径 检查 Cellforrowatindexpath 是否正确?我不需要在 Imagearray 中添加 Image? 所以我把这段代码隐藏在 cellforrowAtIndexPath cell.CaptureImage.image = [imageArray objectAtIndex:indexPath.row]; 好的,你隐藏上面的代码,并将下面的代码添加到 imagepickercontroller [self.table reloadrowatindexpath:@[indexpath]];方法

以上是关于如何在Objective c中将捕获图像添加到UITableView的主要内容,如果未能解决你的问题,请参考以下文章

如何在Objective C中将对象添加到NSMutableArray?

如何在 Swift 或 Objective C 中将文本添加到文件中?

如何在UI测试中将照片添加到模拟器的相机胶卷

如何在Objective C中将对象序列化为JSON? [复制]

如何在本机反应中将捕获的图像保存到应用程序文件夹?

如何在 Objective-C 中将带有补充视图的标题添加到 UiCollectionView?