2

我有一个 CollectionViewController 和一个 CollectionViewCell。我正在从数据库中获取数据,因此在加载控制器时,它会动态创建相应的单元格。

每个单元格都有一个 UIButton 和 UITextView。我正在使用 UIButton 来显示图片(如果它存在于数据库中)或捕获图像(如果按下)。

InboundCollectionViewController.m

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{
    InboundCollectionViewCell *inboundDetailCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"InboundDetailCell" forIndexPath:indexPath];

    Image *current = [images objectAtIndex:indexPath.row];

    [inboundDetailCell.imageType setText:[NSString stringWithFormat:@"%@", [current pd_description]]];

    if ([current.pd_image isKindOfClass:[NSData class]] == NO) {
        [inboundDetailCell.imageButton addTarget:self action:@selector(useCamera)     forControlEvents:UIControlEventTouchUpInside];
    }
    else {
        [inboundDetailCell.imageButton setImage:[UIImage imageNamed:@"check.png"] forState:UIControlStateNormal];
    }

    return inboundDetailCell;
}

到目前为止,一切都很好。我启动我的应用程序。集合视图控制器根据数据库的结果用单元格填充自己。

如果图像字段有图像,则在我的自定义 imageButton 的图像属性中加载“check.png”。

如果图像字段没有图像,则将 imageButton 的 TouchUpInside 操作设置为方法“useCamera”。

- (void)useCamera 
{
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];

    if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {
        [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
    }
    else
    {
        [imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    }

    [imagePicker setDelegate:self];
    [self presentViewController:imagePicker animated:YES completion:NULL];
}

现在,根据我正在遵循的教程,我必须实现以下代码:

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

    // set image property of imageButton equal to the value in UIImage 'image' variable ???

    [self dismissViewControllerAnimated:YES completion:NULL];
}

在我发现的大多数示例中,ImageView 和 ImagePickerController 是在同一个 ViewController 中创建的。因此很容易访问 ImageView 的图像属性(或我的情况下的按钮)。

我的问题是我的“IBOutlet UIButton imageButton”位于 InboundCollectionViewCell 内,而不是 InboundCollectionViewController。因此,我找不到将相机返回的图像传递给按钮的图像属性的方法。

请注意,我对 Objective C 和 Xcode 都很陌生,这是我的第一个项目.. 所以要温柔!:P :)

先感谢您!

4

1 回答 1

1

确保 useCamera 接收到被按下的按钮,并将其存储在成员变量中:

- (void)useCamera:(id)sender {
    UIButton *button = (UIButton *)sender;
    self.lastButtonPressed = sender;  // A member variable

    ...
}

请注意,由于签名已更改,您需要将 touchUpInside 重新映射到此函数。

现在,在 imagePickerController:didFinishPickingMediaWithInfo: 中,您可以访问成员变量 self.lastButtonPressed 来更新其图像。

蒂姆

于 2012-10-26T21:22:35.463 回答