2012-04-18 29 views
1

這是我得到的:如何將來自調用視圖控制器的引用傳遞給以segue呈現的引用?

我有一個根視圖控制器與圖像數組。我有一個detailViewController,它只有一個全屏UIImageView來顯示全屏圖像。我也有一個segue定義,提供detailViewController。當用戶在RootViewController的像這樣選擇圖像此SEGUE被編程調用:

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

的問題是,所述detailViewController具有它設置爲它顯示的UIImageView的圖像的圖像特性和我需要的方式將圖像傳遞給它來顯示。我該怎麼做呢?根據蘋果文檔,我應該在調用控制器中實現prepareForSegue方法,但是在那個時候,我不再有權訪問上面的索引。這些圖像位於根視圖控制器中的一個數組中,我需要該索引來知道將哪個圖像傳遞給detailViewController。我還將detailViewController設置爲一個協議,將調用控制器設置爲委託,然後在init()方法中調用「setImage」方法,但這似乎不起作用,並且看起來像是一個瘋狂的實現。 。

我考慮在像@property INT selectedIndex處RootViewController的聲明一個屬性,則設置該屬性在上述方法中,然後在prepareForSegue方法做類似:

detailViewController.imageForDisplay = [圖像objectAtIndex:的selectedIndex];

這可能會工作,但這種方法揉我錯了......

在此先感謝您的幫助!

回答

1

兩種處理方法。一個用途prepareForSegue並保存索引調用SEGUE在什麼地方...

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中。

希望有所幫助。看起來你正在接近。

+0

赫......我在編輯我的問題,以表明我在回答時考慮了您的答案。我不喜歡這兩種方法中的任何一種,但如果這是唯一的選擇......我想我更喜歡你的第一個方法,用一個屬性來保存索引。我的嘴裏仍然留下不好的味道,但是......感謝你的回覆。我想我只是使用索引屬性方法(你的第一個解決方案)。 – HackyStack 2012-04-18 16:52:47

+0

你的旋轉木馬有像'indexOfSelectedItem'這樣的屬性嗎?這可能是我如何做到的。如果我用tableView做同樣的事情,我將在prepareForSegue中使用'indexPathForSelectedRow',而不是在控制器的某處保存索引。 – 2012-04-18 16:57:29

+0

很好的答案!如果有,我會使用它。如果不是這樣,那我會完成它。你說得對,那是財產所屬的地方。這就是爲什麼我把它作爲視圖控制器中的一個屬性感到不安。謝謝! – HackyStack 2012-04-18 18:47:47

相關問題