2014-11-03 37 views
0

我有三個視圖控制器,它們使用分段控件在模態間切換。據我所知,用戶在它們之間切換的越多,應用程序的內存就越多,因爲它會一直添加新的視圖而不會丟棄先前的視圖。將分段控件切換到不同視圖後關閉視圖?

要解決這個問題,我嘗試在我的切換方法的末尾添加dismissViewControllerAnimated:YES。這導致了一個警告 - 「警告:在演示或解散正在進行時試圖從視圖控制器中解僱!」

任何想法如何做到這一點,使其功能類似於標籤欄?

- (IBAction)switchTab:(id)sender { 

    UISegmentedControl *segControll = (UISegmentedControl *)sender; 
    if (segControll.selectedSegmentIndex==2) 
    { 

     [self performSegueWithIdentifier:@"segToSecondView" sender:keyValue]; 

    } 
    else if (segControll.selectedSegmentIndex==0) 
    { 
     [self performSegueWithIdentifier:@"segToThirdView" sender:keyValue]; 
    } 
    [self dismissViewControllerAnimated:YES completion:nil]; 

} 

回答

0

解決方案:不要使用模態演示。創建您自己的自定義容器視圖控制器,並使用方法 transitionFromViewController:toViewController:duration:options:animations:completion: 在子視圖控制器之間切換。

你應該可以使用容器視圖控制器和嵌入式segue來連接你的「根」視圖控制器(第一個視圖控制器顯示爲一個子視圖),然後使用上述方法切換到不同的子視圖。

你會使容器視圖比屏幕略小,所以父視圖控制器有空間來顯示它的分段控制。

+0

你知道任何教程或例子進一步證明這一點嗎?這聽起來像我應該一直在做的事情。 – user1145643 2014-11-03 22:45:51

0

如果您想要使用分段控件在控制器之間移動,您需要使用與問題中所用內容不同的邏輯。如果您選擇的索引大於當前所在的索引,則您需要展示視圖控制器,如果您要訪問的索引小於當前索引,則應該廢除或使用展開式索引。如果你需要返回多個控制器,那麼使用unwind segue可能是最好的選擇。