我有一个视图控制器,其中UITableView
包含一些自定义单元格。
在自定义单元格中,我有一个主UIImageView
。我在图片视图中添加了一个点击手势识别器,以便在点按图像时调用handleImageTap
方法。
问题
我要做的是将图像从选定的UIImageView
(从特定单元格)传递到新的视图控制器。
当调用handleImageTap时,我运行以下命令:
UIImageView *imageView = (UIImageView *)gestureRecognizer.view;
// send the image instead of self when firing the segue
[self performSegueWithIdentifier:@"remindMeTurnInfo" sender:imageView];
然后我在prepareForSegue
方法中有以下内容:
if ([segue.identifier isEqualToString:@"remindMeTurnInfo"]) {
UIImageView *imgView = (UIImageView *)sender;
MESPlayedTurnReminderViewController *VC = segue.destinationViewController;
VC.mainImageView.image = imgView.image;
}
以上不起作用图像未通过。如何将图像从选定的单元格图像视图中获取到新控制器?
同时
有时,当选择单元格的图像视图时,会调用didSelectRowAtIndexPath
方法。这不正确,在点按图像视图时不应调用。这似乎并不是所有的时间,无论如何都要确保这不被称为?
我还需要引用imageview在prepareForSegue
方法中的单元格。如何在此处(不应该)实际选择单元格时,如何获取imageview所在单元格的参考。
答案 0 :(得分:1)
你的问题有2个问题。
首先,不应使用表格视图单元格来存储数据。表视图单元格是视图对象。他们显示数据。当用户触发对单元格的操作时,您应该找出单元格的indexPath,使用该信息查找模型中的数据(在您的情况下,所选行或部分/行的图像)并使用该信息
其次,你永远不应该试图操纵另一个视图控制器的视图。将其他VC的视图视为私有。这是一个很大的问题。到达另一个VC并触摸其视图违反了两个VC的封装,这意味着执行触摸的VC依赖于“触摸”VC的外观。坏。然后,您无法在不破坏其他代码的情况下更改触摸的VC的外观。它在创建新VC后也无法正常工作,因为它的视图尚不存在。
相反,您应该将“imageToUse”属性添加到另一个视图控制器,并在prepareForSegue方法中设置THAT。然后第二个视图控制器可以拍摄图像并将其安装在它的viewWillAppear方法的图像视图中。
答案 1 :(得分:0)
我改变了方法。
改为在目标控制器上放置UIImage
。然后在该控制器的viewDidLoad中,我将图像传递给UIImageView
。我想这是因为还没有创建图像视图。