2012-04-03 88 views
1

我遇到了SplitViewController應用程序的問題。當我從主視圖中的表中選擇一行時,我將用替換segue替換詳細視圖。問題是每次發生這種情況時它會創建一個新實例/重新加載詳細視圖控制器。有沒有什麼辦法可以擁有它,所以如果它已經被實例化,它將用先前的實例替換細節視圖。我希望狀態能夠記住細節視圖,例如輸入到文本框中。替換segue創建新實例

+0

我剛剛開始與iPad故事板(包括拆分視圖控制器)一起工作,但是沒有可以使用替代替代的Push segue嗎?或者框架在這種情況下不允許Push?這適用於iPhone的成語。 – Rob 2012-04-03 19:14:21

+1

我試圖推動,但決定我不想要後退導航。我記得每次都會創建一個新的實例。我有種解決它通過將每個細節ViewController聲明爲主ViewController上的一個屬性並在第一個segue上實例化它們。然後我不調用performSegue,而是手動推送/彈出實例到細節視圖。 – 2012-04-03 22:42:40

+0

我也想知道如何使用替換segues。替代塞格和推塞格之間有什麼區別?如果替換的視圖控制器保留在內存中,那麼它如何被恢復? – Matt 2013-03-14 03:21:35

回答

2

無法完成。一個SEGUE總是會創建一個視圖控制器

1

我用的是替代SEGUE,但在MasterVC我實現

-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 

    if ([identifier isEqualToString:@"showCalculatorViewController"]) { 

     if (self.splitViewController) { 

      NSObject *currentDetail = [self.splitViewController.viewControllers lastObject]; 

      if ([currentDetail isKindOfClass:[RootCalcViewController class]]) { 

.... 

然後我填寫現有VC的新特性,並返回NO。

但是我沒有UINAvigationController作爲我的初始Detail View控制器,因爲我處理的是masterVCs的導航。

此外,在AppDelegate中,didFinishLaunchingWithOptions需要設置正確的細節VC。生成的代碼假定它是一個UINavigationController。同樣在生成的MasterViewController中,viewDidLoad。這將爲您節省一些應用程序崩潰,如果你替換細節UINAvigationController。

當我加載不同的視圖控制器時,我讓「Replace segues」替換它們。

0

或者 - 你可以讓你的DetailController實現Singleton模式並將任何調用轉發給+ new,+ alloc或類似的東西給你的單例方法。