1

这是我所拥有的:

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

- (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index
{
    [self performSegueWithIdentifier:@"fullScreenSegue" sender:self];
}

问题是 detailViewController 有一个 image 属性,它设置为它显示的 UIImageView 的图像,我需要一种方法将图像传递给它以显示。我该怎么做呢?根据苹果文档,我应该在调用控制器中实现 prepareForSegue 方法,但那时我不再有权访问上面的索引。图像位于根视图控制器的数组中,我需要该索引来知道将哪个图像传递给 detailViewController。我还将 detailViewController 设置为具有将调用控制器设置为委托的协议,然后在 init() 方法中调用“setImage”方法,但这似乎不起作用,而且无论如何似乎都是一个疯狂的实现。 .

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

detailViewController.imageForDisplay = [图像 objectAtIndex:selectedIndex];

这可能会奏效,但这种方法让我错了......

在此先感谢您的帮助!

4

1 回答 1

1

两种处理方式。在调用 segue 之前,使用 prepareForSegue 并将索引保​​存在某处......

self.selectedIndex = index;
[self performSegueWithIdentifier:@"fullScreenSegue" sender:self];

然后在prepareForSegue使用中:

if([[segue identifier] isEqualToString:@"fullScreenSegue"])
{
    DetailViewController *detailViewController = segue.destinationViewController;
    detailViewController.imageForDisplay = [self.images objectAtIndex:self.selectedIndex];
}

第二种方法是使用您的委托和协议,但setImage在您的方法中进行调用viewDidLoad,而不是在您的init.

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

于 2012-04-18T16:50:11.617 回答