3

我提出UIViewController,如:導航控制器始終是零

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 

PhotoViewController *resultVC = [storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([PhotoViewController class])]; 
[self.navigationController presentViewController:resultVC animated:YES completion:^{}]; 

我已經登錄控制檯,結果是:

po self.navigationController 
<UINavigationController: 0x9c3e920> 

但是,當我在PhotoViewController類我已經登錄控制檯和結果:

po self.navigationController 
nil 

其零。我不知道爲什麼會發生這種情況。我也有這個,但它的零總是:

[self presentViewController:resultVC animated:YES completion:^{}]; 

回答

6

是的,它是零。 UIViewController.navigationController只有在推送ViewController時纔會設置屬性,不會顯示。 一個不太優雅的解決方案是,您在呈現它之前創建一個全局引用(如將單引號放在單引號中)到NavigationController,然後您可以從UIViewController中讀取它。

0

只是瞭解如何使用navigationController。

替換下面的代碼:[self.navigationController presentViewController:resultVC animated:YES completion:^{}];[self.navigationController pushViewController:resultVC animated:YES];

+0

我不想推控制器。我想呈現控制器。 –

+0

爲什麼? NavigationController只能推送和Poped。如果您需要另一個動畫,可以使用CATransition: 'CATransition * transition = [CATransition animation]; transition.duration = 0.2f; transition.type = kCATransitionMoveIn; transition.subtype = kCATransitionFromLeft; [[[[self.navigationController.view subviews] objectAtIndex:0] layer] addAnimation:transition forKey:kCATransition];' – Bimawa

+0

第二,您可以在PhotoViewController類(如UINavigationController)中創建屬性。並寫入它self.navigationController。但它不好實際。我們都需要知道你想要什麼? – Bimawa

0

我產生私人navigationController(這裏NAV),然後將分配給主窗口中,以下是代碼:

self.nav = [[UINavigationController的頁頭] initWithRootViewController:自];

[[[UIApplication sharedApplication] delegate] window] .rootViewController = self.nav;

你可以用私人navigationController

view controller [self.nav pushViewController:VC動畫:是];

它適合我!

但你必須導出屬性nav明年或兒童視圖控制器使用