2012-08-22 45 views
0

我有一個UISplitViewController與主UIViewController嵌入在UINavigationController中。工具欄按鈕負責通過segue啓動UIPopoverController。這樣的popover控制器包裝了一個UIViewController,它也嵌入了一個名爲SettingsViewController的UINavigationController。如何從UIStoryboardPopoverSegue獲取由UIPopoverController包裝的視圖控制器?

我可以得到一個指針UIPopoverController從UIStoryboardPopoverSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UITableViewCell *)sender 
{ 
    if ([segue.identifier isEqualToString:@"Settings"]) { 
    UIStoryboardPopoverSegue *popoverSegue = (UIStoryboardPopoverSegue*) segue; 

    SettingsViewController *settingsViewController = ... // TODO 
    settingsViewController.popoverController = popoverSegue.popoverController; 
    } 
} 

但我不能找到一個辦法讓內SettingsViewController的參考。我不想使用可通過類方法訪問的靜態字段,這將是一個糟糕的解決方法。

我錯過了什麼去糾正錯誤?

感謝您的幫助!

回答

5

UIPopoverSegue包含UIPopoverController

UIPopoverController *popoverController = popoverSegue.popoverController; 

有了這個,你可以很容易地得到contentViewController(查看在酥料餅顯示)

UINavigationController *contentNC = (UINavigationController *) popoverController.contentViewController; 

而且從內容導航控制器,你得到的實際視圖控制器:

SettingsViewController *settingsVC = [contentNC.viewControllers lastObject]; 

這是否解決了您的問題問題?

+0

看起來好像它會讓他跳到流行的內容控制器,這聽起來像是在這種情況下將成爲UINavigationController。他仍然需要解開這一跳,並抓住UINavigation控制器的根視圖控制器。 –

+0

的確,我剛剛將這一點加入了Lukas的答案。它現在完美運行,謝謝! –

0

我在問題開始時描述的應用程序中有非常類似的設置。

在我prepareForSegue(和內,我檢查segue.identifier)我搶,並設置酥料餅的視圖控制器上的東西,像這樣:

settingsViewController *settingsPop = segue.destinationViewController; 
settingsPop.someVar = self.var; 

segue.destinationViewController使得它簡單和容易。

相關問題