2015-04-01 79 views
0

我是IOS的新手。 我的問題是,我有一些視圖控制器作爲NavigationController,mainVC,VC1,VC2,VC3,CameraVC。在cameraVC我有一個完成的按鈕行動doneClicked。這些全部視圖控制器都在NavigationController中推送。呈現VC1,而不是推入導航控制器。 doneClicked函數實現poptorootviewcontroller。當我點擊完成按鈕,它讓我到VC1但不是主VC。有什麼辦法,所以我可以彈出所有視圖控制器到VC1,並在這之後自動關閉VC1到mainVC。poptorootviewcontroller並解僱mainViewController

+0

添加視圖控制器堆棧,並彈出到第零索引 – Chandru 2015-04-01 12:53:29

回答

0

將您的MainVC設置爲根視圖控制器,並在IBAction of done按鈕中使用代碼彈出到MainVC。

[self.navigationController popToRootViewControllerAnimated:YES]; 

希望它有幫助。

+0

感謝彼得您的迴應。其實我的主VC是添加在TabBarController,所以我不能讓mainVC作爲根視圖控制器。有什麼辦法可以讓協議/委託來執行一些操作,也可以解除視圖控制器。 – Zeebok 2015-04-01 12:50:08

+0

你可以參考[這](http://stackoverflow.com/questions/14636891/dismissing-a-presented-view-controller) – iPeter 2015-04-01 12:58:54

0

爲了彈出視圖控制器

[self.navigationController popToRootViewControllerAnimated:YES];

並關閉呈現視圖控制器

[自dismissViewControllerAnimated:NO完成:零]

0
[self.navigationController setViewControllers:@[mainVC]]; 

我覺得這個代碼將在你的情況下工作。 iOS開發者庫:

將當前由導航控制器管理的視圖控制器替換爲指定的項目。

- (void)setViewControllers:(NSArray *)viewControllers 
       animated:(BOOL)animated 

source

必須dissmiss現在視圖控制器後,做到這一點。使用代理

現在讓我們認爲您的導航堆棧是空的,並且您的根目錄是mainVC。你想呈現VC1就可以了。但是你應該給一個委託給mainVC的人,解散VC1後會發生什麼。例如,您從mainVC中呈現VC1。並且你想在推出VC1之後推VC2。沒關係,只是在mainVC中有一個委託,所以在這個方法中

[self.navigationController pushViewController:VC2]; 

目前的意見並不影響你的導航堆棧。它不在你的堆棧中。所以每次你從控制器中撤銷它,你都應該委派一個控制器來解決解散後會發生的事情。

試試吧。 希望它有幫助。

+0

我怎麼可以使用委託,而我在第四level.i推1vc然後第二屆然後3日和4日。 。從第四級開始有什麼辦法可以實現協議。 – Zeebok 2015-04-01 13:28:38

+0

是的,但我應該知道你的導航地圖是如何。讓我編輯我的答案來解釋一個場景。我會展示一個小例子。 – 2015-04-01 13:34:43

+0

@Zeebok,我認爲你可以使用委託實現它。我使用通知popToRootVC和Dismiss,運作良好。 – dengApro 2017-08-12 11:09:06