2012-05-05 72 views
2

在我的iOS應用程序中,我有四個UIViewController s,爲了說明起見,我們稱它們爲1,2,3和4.我有從一個到下一個漸進(1 →2,2→3,3→4)。然而,在4我想有一個按鈕,可以繼續回到一個。我只想到了這樣做的一種方式,但我無法弄清楚如何實現它...使用segues回退兩個UIViewControllers

這種方式將有一個segue直接連接4-> 1,當segue被稱爲刪除2和3從內存(否則用戶可以繼續建設UIViewController s,因爲他們都沒有被刪除)。我不知道如何將它們從內存中刪除,因爲我沒有任何指向它們的變量(也就是說,它們是在它們各自的segues被調用時創建的,所以據我所知我沒有直接訪問他們)。

我不知道這是否是最好的方式,但如果你能弄清楚如何做到這一點(或更好的方法),任何幫助表示讚賞:)

回答

2

如果您尚未使用,則需要使用UINavigationController。

然後在你的第4個視圖,您只需要一個按鈕,做如下選擇:

- (IBAction)goBackToFirstView:(id)sender { 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
} 

這將處理所有的內存爲您和通過彈出一切送你回第一個視圖控制器關閉堆棧。

+0

如果他想要做的只是回到第一個,那麼是的。這是你應該怎麼做的。但是,如果他想要能夠按下後退按鈕並再次查看控制器#4,那麼這不會那樣做。 – mweathers

+0

「你需要使用UINavigationController ...」我應該只使用一個嗎?我爲每個添加到故事板的'UIViewController'添加了一個... –

+0

他表示他想要去1-> 2-> 3-> 4-> 1 –

0
NSArray *array = [NSArray arrayWithObject:[navigationController.viewControllers objectAtIndex:navigation.viewControllers.count-1]]; 
    navigationController.viewControllers = array; 

然後執行SEGUE。

+0

這是做不好的方法。 –

+0

你想提供一些洞察,爲什麼這是一個壞的方法? – mweathers

+0

你真的應該以這種方式手動管理你的UINavigationControllers子viewController。您應該使用內置的函數來彈出,推送等。 即使你從控件中刪除對象,也不一定會釋放它們,並可能導致實際viewController在內存中停留,而導航控制器失去指向它們的指針。 –

相關問題