2012-01-26 32 views
2

我點名navController導航控制器編程在我的模態視圖控制器的viewDidLoad中期間進行展示:導航欄不具有編程製作的UINavigationController

self.navController = [[UINavigationController alloc] initWithRootViewController:self]; 
self.navController.view=self.view; 
[self setView:self.navController.view]; 

但是,當我啓動模式視圖控制器我沒有看到導航酒吧,只是我在IB做的標準視圖。怎麼了?

+0

這是代碼很混亂。您不能將視圖從一個控制器設置到另一個控制器的視圖。而且控制器通常不希望將他們的視圖添加爲其他控制器視圖的子視圖。 – smparkes

回答

5

您的解決方案無法工作。

假設您的模態控制器名爲ModalViewController。這是一個簡單的UIViewController與一個xib創建的接口鏈接。

現在,在某些時候,您需要以模態方式呈現ModalViewController。正如您在規範中所寫的,我認爲您還想使用UINavigationController並控制其導航欄。

執行此操作的代碼可能如下所示,其中presentModally可能是它未包含在ModalViewController中的一種方法。現在

- (void)presentModally:(id)sender { 

    ModalViewController *modalController = [[ModalViewController alloc] initWithNibName:@"ModalView" bundle:nil]; 

    // Create the navigation controller and present it. 
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:modalController]; 

    [self presentViewController:navigationController animated:YES completion: nil]; 
} 

,內viewDidLoadModalViewController您可以訪問navigationController屬性。通過這種方式,您可以控制navigationController行爲。例如:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // the code changes the title for the navigation bar associated with the UINavigationController 
    self.title = @"Set from ModalViewController"; 
} 

的一些注意事項

要了解UINavigationController作品如何閱讀UINavigationController class reference

爲了理解工作控制器如何語氣讀Modal view controllers documentation

我提供的代碼是一個簡單的例子,只有示範(我已經手寫,所以檢查語法)。您需要關注內存管理以及如何呈現模態控制器。特別是,正如Apple文檔所述,要顯示模式控制器,您需要執行以下步驟:

  1. 創建您要呈現的視圖控制器。

  2. 將視圖控制器的modalTransitionStyle屬性設置爲所需的值。

  3. 將委託對象分配給視圖控制器。通常,委託是呈現視圖控制器。所呈現的視圖控制器使用委託來通知呈現視圖控制器何時準備被解散。它也可能將其他信息傳回給代表。

  4. 調用presentViewController:animated:completion:當前視圖控制器的方法,傳入要呈現的視圖控制器。

  5. 觸發(必要時)一些動作來解除模態控制器。

希望它有幫助。

+0

剛剛得到它的工作,謝謝你的偉大答案 – jfisk

+0

不客氣。 –

+0

@flexaddicted你能解釋一個快速版本的方法嗎? TKS – jmcastel

相關問題