XCode5 self.navigationController pushViewController:animated:不打开新的viewcontroller

时间:2013-12-29 20:04:57

标签: iphone objective-c uiviewcontroller uinavigationcontroller pushviewcontroller

我不确定为什么但是在Xcode 5中处理IOS6.1的项目我有一个连接到IBAction的按钮,我正在尝试导航到新的视图控制器。

我尝试了两个不同的代码来创建viewController,然后在视图控制器不是nil的情况下将其推送到导航,两种情况都不会出现viewController。

首先尝试:使用故事ID - 我已将视图控制器的故事ID设置为imageCapture并将类设置为VSImageCaptureViewController

VSImageCaptureViewController* imageCaptureViewController = (VSImageCaptureViewController*)([self.storyboard instantiateViewControllerWithIdentifier:@"imageCapture"]);

[self presentViewController:imageCaptureViewController animated:NO completion:nil];

第二次尝试:使用viewcontroller的名称

VSImageCaptureViewController *imageCaptureViewController = [[VSImageCaptureViewController alloc] initWithNibName:@"VSImageCaptureViewController" bundle:nil];

[self.navigationController pushViewController:imageCaptureViewController animated:YES]; 

你能看到什么问题吗?或者你认为我忘了初始化

1 个答案:

答案 0 :(得分:0)

检查self.navigationController是否为零。

如果它为n,则意味着您没有在UINavigationController的上下文中运行(当UIViewController被添加到导航堆栈时,系统会为您设置此属性。)

如果是这种情况,那么您还没有正确设置UINavigationController。

请注意,您无法自行设置navigationController属性。当UIViewController被添加到UINavigationController的堆栈时,系统会为您设置它(当它从堆栈中移除时将其设置为nil。)

要进行此设置,您通常会在创建主视图控制器后立即创建UINavigationController实例。

UIViewController *mainViewController = ...;
UINavigationController *mainNavController = [[UINavigationController alloc] initWithRootViewController:mainViewController];
// now present the mainNavController instead of the mainViewController

如果您使用的是故事板,则可以拖出UINavigationController实例,并将默认的根视图控制器替换为mainViewController的实例。