我现在已经有这个问题大约3个小时,我准备把Mac扔到房间里。
基本上,我正在尝试将UIImage传递给另一个视图控制器。我有设置,所以当用户点击其中一个UIColectionViewCells时,它会将它们发送到另一个带有全屏UIImageView的视图。我似乎无法弄清楚如何从ViewController1到ViewController2获取UIImage。
以下是我的一些代码。记住,我正试图将这个UIImage selectedImage 从VC1升级到VC2。
collectionView cellForItemAtIndexPath
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = @"GalleryCell";
GalleryCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
[cell.layer setBorderWidth:2.0f];
[cell.layer setBorderColor:[UIColor whiteColor].CGColor];
[cell.layer setCornerRadius:5.0f];
UIImage *usingImage = [imageArray objectAtIndex:indexPath.row];
UIImageView *imageView = [[UIImageView alloc] initWithImage:usingImage];
imageView.tag = 100;
imageView.frame = CGRectMake(0, 0, cell.bounds.size.width, cell.bounds.size.height);
[cell addSubview:imageView];
return cell;
}
collectionView didSelectItemAtIndexPath
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *selectedCell = [collectionView cellForItemAtIndexPath:indexPath];
UIImage *selectedImage = (UIImage *)[selectedCell viewWithTag:100];
[self performSegueWithIdentifier:@"GotoDetail" sender:nil];
}
答案 0 :(得分:3)
以下行可能导致此问题:
UIImage *selectedImage = (UIImage *)[selectedCell viewWithTag:100];
当您使用viewWithTag:
时,它会返回与该单元格相关联的UIImageView
,而不是UIImage
。
你需要改变它:
UIImageView *selectedImageView = (UIImageView *)[selectedCell viewWithTag:100];
UIImage *selectedImage = selectedImageView .image;
对于传递数据,将所选图像存储在实例变量(Say selectedImage)中,您需要实现prepareForSegue:
,如:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"GotoDetail"])
{
YourDetailType *detailController = segue.destinationViewController;
detailController.imageProperty= self.selectedImage;
}
}
答案 1 :(得分:3)
您的代码存在多个问题:
如果您没有从出列方法中回复,则应该只向图片添加图片视图。否则,每次回收一个单元格时,您都会向其中添加另一个图像视图,所以过了一段时间后,您将在单元格上有数十个图像视图。
接下来,您不应将单元格用作存储图像的位置。你已经拥有了一系列图像。使用它可以使用所选单元格的indexPath将图像传递到另一个视图控制器。
导致崩溃的原因,第2步将修复:您正在将图像视图转换为UIImage类型,这是错误的。
最后,要将信息传递给详细视图控制器,请将属性selectedRow(整数)或selectedRowImage(UIImageView)添加到详细视图控制器。在prepareForSegue方法中,从segue获取目标视图控制器,将其强制转换为正确的类型,并使用所选单元格的indexPath设置属性。
答案 2 :(得分:1)
[selectedCell viewWithTag:100] 是 UIImageView ,而不是 UIImage ,投射无效。
[(UIImageView *)[selectedCell viewWithTag:100]].image;
您可以尝试像这样获取 UIImageView 的 UIImage 参考。
...但我同意 Duncan C ,你应该重新思考如何获取图像而不是从单元格的UIImageView中获取它们。