pushViewController 不是根 viewController
Posted
技术标签:
【中文标题】pushViewController 不是根 viewController【英文标题】:pushViewController that's not a root viewController 【发布时间】:2016-05-16 19:58:42 【问题描述】:我有两个视图控制器:LevelSelectViewController 和 GameViewController。
我正在制作的应用程序的根视图控制器都不是(根视图控制器称为 MainViewController)。
如何使用导航方法 pushViewController:animated: 来实现从 LevelSelectViewController 到 GameViewController 的转换?
在我的 LevelSelectViewController 中,您单击一个按钮,然后执行以下操作方法:
- (IBAction)buttonPressed:(id)sender
// the pushViewController:animated: method hopefully can be used
// other code
【问题讨论】:
你是如何显示LevelSelectViewController
的?
presentViewController...这就是我在我的应用程序中浏览所有按钮的方式。如果我将根视图控制器设置为 AppDelegate 中的导航控制器,是否可以将其他子视图控制器用作导航控制器?
【参考方案1】:
如何使用导航方法
pushViewController:animated:
进行从LevelSelectViewController 到GameViewController 的转换?
术语“根视图控制器”可能有点令人困惑,因为UIWindow
有一个rootViewController
属性,而UINavigationController
有一个initWithRootViewController
参数。如果您正在调用-pushViewController:animated:
,则您的视图控制器图中必须有一个导航控制器,因为该方法属于UINavigationController
。如果您的 LevelSelectViewController
实例是导航堆栈的一部分,您可以这样做:
- (IBAction)buttonPressed:(id)sender
// create a game controller
GameViewController *gameController = [[GameViewController alloc] initWithNibName:nil bundle:nil];
// push it
[self.navigationController pushViewController:gameController animated:YES];
// other code
不过,现在更典型的做法是将所有视图控制器放在情节提要中,然后简单地将按钮连接到推送转换。
【讨论】:
我不知道如果您将根视图控制器设置为 App Delegate 中的导航控制器,该视图控制器的其他孩子也将能够享受相同的功能(无需重新定义其他导航控制器实例).....谢谢!【参考方案2】:如果您使用情节提要,只需创建一个转场。如果你没有传递任何信息,你可以通过控制从一个视图控制器拖动到另一个来推送它。它是否是根视图控制器并不重要。
如果您想从视图控制器传递数据,请在情节提要上创建一个转场,而不是索引路径或按钮等,并在视图控制器中调用 prepareForSegueMethod,其标识符与情节提要上的转接完全相同。
【讨论】:
以上是关于pushViewController 不是根 viewController的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationController pushViewController 不起作用