[self.navigationController pushViewController:ngView 动画:YES];不工作

Posted

技术标签:

【中文标题】[self.navigationController pushViewController:ngView 动画:YES];不工作【英文标题】:[self.navigationController pushViewController:ngView animated:YES]; not working 【发布时间】:2013-05-23 09:49:12 【问题描述】:

如果我使用

 NGViewController *ngView = [[NGViewController alloc]initWithNibName:Nil bundle:Nil];
[self presentViewController:ngView animated:NO completion:nil];

控制器将进入 NGViewController 页面。

但是如果我使用这个导航控制器

NGViewController *ngView = [[NGViewController alloc]initWithNibName:Nil bundle:Nil];
[self.navigationController pushViewController:ngView animated:YES];

控制器将在同一页面中。

谁能告诉我这是什么问题。

【问题讨论】:

您使用的是UINavigationController吗?如果不是,那么self.navigationController 将是nil 是的,我没有使用 UINavigationController 所以它不会来....thanx 2 all 你的应用程序是否基于UINavigation,如果没有,则将其转换为基于导航的应用程序,然后它将工作 确保您将视图控制器推送到导航堆栈中。否则 self.navigationController 将返回 nil; 【参考方案1】:

你应该使用这个代码

NGViewController *ngView = [[NGViewController alloc]initWithNibName:Nil bundle:Nil];
[self presentViewController:ngView animated:NO completion:nil];

写完这一行之后你想用推送视图控制器进入不同的页面

UINavigationController *navigationController = [[UINavigationController       alloc]initWithRootViewController:ngView];

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

希望你能通过这段代码解决这个问题祝你好运

【讨论】:

【参考方案2】:

您的self.navigationController 可能是nil - 通过调试检查它。您的 self 视图控制器不在 UINavigationController 内。

【讨论】:

【参考方案3】:

现在我正在使用此代码

 NGViewController *ngView = [[NGViewController alloc]initWithNibName:Nil bundle:Nil];
 [UIView beginAnimations:nil context:NULL];
 [UIView setAnimationDuration: 0.50];
 [self presentViewController:ngView animated:NO completion:nil];

这样其他的效果也一样

【讨论】:

我希望你以后能结束动画......(P.S. 这种动画方式真的很旧 [pre ios 4])【参考方案4】:

Self Controller 应该有导航控制器(在 Storyboard 中)以便导航。

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

【讨论】:

【参考方案5】:

UINavigationController 是一个controller of controllers,它旨在允许您push and pop controllers 并管理视图的层次结构。你的navigationController 属性告诉你你的NGViewController 当前是否在UINavigationController's 层次结构中;如果不是(在本例中),navigationController 属性将返回 nil

【讨论】:

【参考方案6】:

您必须创建自己的导航控制器,然后尝试推送视图控制器,从而构建视图层次结构。 我通常会建议这样做:

 UINavigationController *navigationController = [[UINavigationController       alloc]initWithRootViewController:firstviewController];
[self.window setRootViewController:navigationController];
navigationController.delegate = self;
navigationController.navigationBarHidden = YES;

【讨论】:

【参考方案7】:

你需要在你的第一个控制器中声明它

NGViewController *ngView = [[NGViewController alloc]init];
[self.navigationController pushViewController:ngView animated:YES];

【讨论】:

以上是关于[self.navigationController pushViewController:ngView 动画:YES];不工作的主要内容,如果未能解决你的问题,请参考以下文章

我如何能够推动自己的观点而不必每次都实例化自己

以编程方式导航到另一个视图控制器/场景