Ios 如何将调用的视图控制器的引用传递给带有segue的控制器?

Ios 如何将调用的视图控制器的引用传递给带有segue的控制器?,ios,Ios,以下是我得到的: 我有一个带有图像数组的根视图控制器。我有一个detailViewController,它只是一个全屏UIImageView,用于显示全屏图像。我还定义了一个显示detailViewController的序列。当用户在rootViewController中选择图像时,会以编程方式调用此序列,如下所示: - (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index { [self p

以下是我得到的:

我有一个带有图像数组的根视图控制器。我有一个detailViewController,它只是一个全屏UIImageView,用于显示全屏图像。我还定义了一个显示detailViewController的序列。当用户在rootViewController中选择图像时,会以编程方式调用此序列,如下所示:

- (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index
{
    [self performSegueWithIdentifier:@"fullScreenSegue" sender:self];
}
问题是detailViewController有一个图像属性,它设置为它显示的UIImageView的图像,我需要一种方法将图像传递给它以显示。我该怎么做?根据apple docs,我应该在调用控制器中实现prepareForSegue方法,但此时,我不再能够访问上面的索引。这些图像位于根视图控制器中的一个数组中,我需要该索引来知道要将哪个图像传递给detailViewController。我还将detailViewController设置为具有一个协议,该协议将调用的控制器设置为委托,然后在init()方法中调用一个“setImage”方法,但这似乎根本不起作用,而且似乎是一个疯狂的实现

我考虑在rootViewController中声明一个属性,如@property int selectedIndex,然后在上述方法中设置该属性,然后在prepareForSegue方法中执行以下操作:

detailViewController.imageForDisplay=[images objectAtIndex:selectedIndex]

那可能行得通,但这种方法让我觉得不对劲


提前感谢您的帮助

有两种处理方法。在调用segue之前,请使用prepareForSegue并将索引保存在某个位置

self.selectedIndex = index;
[self performSegueWithIdentifier:@"fullScreenSegue" sender:self];
然后在
prepareforsgue
中使用:

if([[segue identifier] isEqualToString:@"fullScreenSegue"])
{
    DetailViewController *detailViewController = segue.destinationViewController;
    detailViewController.imageForDisplay = [self.images objectAtIndex:self.selectedIndex];
}
第二种方法是使用委托和协议,但在
viewDidLoad
方法中调用
setImage
,而不是在
init
中调用


希望有帮助。你似乎离得很近了。

有两种方法可以解决这个问题。在调用segue之前,请使用prepareForSegue并将索引保存在某个位置

self.selectedIndex = index;
[self performSegueWithIdentifier:@"fullScreenSegue" sender:self];
然后在
prepareforsgue
中使用:

if([[segue identifier] isEqualToString:@"fullScreenSegue"])
{
    DetailViewController *detailViewController = segue.destinationViewController;
    detailViewController.imageForDisplay = [self.images objectAtIndex:self.selectedIndex];
}
第二种方法是使用委托和协议,但在
viewDidLoad
方法中调用
setImage
,而不是在
init
中调用


希望有帮助。看起来你已经很接近了。

嘿。。。我在编辑我的问题,以表明我考虑了你的答案,因为你正在回答。我不喜欢这两种方法,但如果这是唯一的选择。。。我想我更喜欢你的第一个,用一个属性来保存索引。仍然在我嘴里留下不好的味道,但是。。。谢谢你的回复。我想我将只使用索引属性方法(您的第一个解决方案)。您的旋转木马是否具有类似于
indexOfSelectedItem
的属性?我可能就是这么做的。如果我对tableView执行相同的操作,我将在PrepareForSequedRow中使用“indexPathForSelectedRow”,而不是将索引保存在控制器中的某个位置。回答得好!如果有,我就用它。如果没有的话,等我处理完就可以了。你说得对,那是财产的归属地。这就是为什么我对将其作为视图控制器中的属性感到不安。谢谢嘿。。。我在编辑我的问题,以表明我考虑了你的答案,因为你正在回答。我不喜欢这两种方法,但如果这是唯一的选择。。。我想我更喜欢你的第一个,用一个属性来保存索引。仍然在我嘴里留下不好的味道,但是。。。谢谢你的回复。我想我将只使用索引属性方法(您的第一个解决方案)。您的旋转木马是否具有类似于
indexOfSelectedItem
的属性?我可能就是这么做的。如果我对tableView执行相同的操作,我将在PrepareForSequedRow中使用“indexPathForSelectedRow”,而不是将索引保存在控制器中的某个位置。回答得好!如果有,我就用它。如果没有的话,等我处理完就可以了。你说得对,那是财产的归属地。这就是为什么我对将其作为视图控制器中的属性感到不安。谢谢