我有一个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:)
提前谢谢!
答案 0 :(得分:1)
确保useCamera收到已按下的按钮,并将其存储在成员变量中:
- (void)useCamera:(id)sender {
UIButton *button = (UIButton *)sender;
self.lastButtonPressed = sender; // A member variable
...
}
请注意,由于签名已更改,您需要将touchUpInside重新映射到此功能。
现在,在imagePickerController中:didFinishPickingMediaWithInfo:您可以访问成员变量self.lastButtonPressed来更新其图像。
添