2012-11-04 127 views
0

我有一個這樣的視圖層次: 的MainView - >子視圖(PresentingView) - > ModalViewc(所有的UIViewController子類)去除模態呈現視圖查看

通過點擊在ModalView一個按鈕,我想刪除這兩個的ModalView和PresentingView所以可以返回到其然後本ModalViewX所述的MainView:

的MainView - > ModalViewX(所有的UIViewController的子類)

[[self presentingViewController] removeFromParentViewController]; 

上面的代碼簡單地駁回模態觀點但呈現觀點依然存在。

我的最終目標是讓ModalView按鈕在返回到MainView之前執行一些結束邏輯。點擊該按鈕將基本上執行以下操作:

  1. 結論的邏輯
  2. 刪除自身(ModalView)和PresentingView(bonuspoints如果我可以動畫刪除)
  3. 泰爾的MainView呈現ModalViewX (也許我會必須以某種方式在ModalView - > viewDidUnload方法中調用第3步)

有關如何執行此操作的建議?

+0

你稱之爲「視圖」,然後顯示與視圖**控制器**相關的代碼。你真的在做什麼? –

+0

UIView或UIViewController是SubView和ModalView的子類嗎? – Martol1ni

+0

UIViewController的子類。 – Wollan

回答

1

首先,將您的整個項目以MainViewController作爲rootview嵌入到UINavigationController中。要獲得從MainViewControllerSubViewController做到這一點:

- (IBAction) theButtonClicked : (id) sender { 
    SubViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"YourIdentifier"]; 
    [self.navigationController pushViewController:vc animated:YES]; 
} 

這將讓你到一個新的UIViewController。如果你想傳遞信息,只需設置vc setVariable:

要返回到rootview,只需撥打[self.navigationController popToRootViewControllerAnimated:YES]

另一種方法是使用塞格斯,在那裏你CTRL+drag從按鈕到下一個的UIViewController。然後應該在方法- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender中設置要完成的邏輯,其中destionationcontroller爲segue.destinationViewController

這樣,您還可以通過將自定義的seguestyle設置爲子類UISegue來添加自定義動畫。

1

對於步驟1(即'結論邏輯'),使用目標動作設計。具體而言,這意味着您將在發生特定事件時將調用的對象添加到方法中。例如,這可以通過控制 - 從故事板拖到視圖控制器來完成。您選擇的視圖控制器是目標,您創建的方法是該操作。更多細節在這裏:https://developer.apple.com/library/mac/#documentation/General/Conceptual/Devpedia-CocoaApp/TargetAction.html

要控制視圖控制器的流程,您有幾個不同的選項。

對於模態視圖控制器,將刪除委託給呈現視圖控制器是一種最佳做法。這意味着模態視圖控制器具有一個名爲委託的屬性,當模態視圖控制器準備好被刪除時(即,模態視圖控制器不會自行刪除),它將接收到一條消息。該代理應符合您創建的協議,可以處理任何相關的結論邏輯並調用dismissViewControllerAnimated,它將刪除所呈現的(模態)視圖控制器。

或者,您可以在故事板中使用segues來管理流,如Martol所述。

有關這些方法來管理視圖控制器的數據和流程的詳細信息,請訪問:http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ManagingDataFlowBetweenViewControllers/ManagingDataFlowBetweenViewControllers.html

希望有所幫助。

相關問題