如何在"基于导航的应用程序"中替换RootViewController

ite*_*ter 15 xcode objective-c interface-builder xib nib

我有一个在XCode中使用"基于导航的应用程序"模板的应用程序.

现在我想更改它,以便加载的第一个视图是常规(自定义)UIView,如果用户单击特定按钮,我将原始RootViewController推送到NavigationController.

我明白在某个地方,有人用我的RootViewController调用它:

- (id)initWithRootViewController:(UIViewController *)rootViewController
Run Code Online (Sandbox Code Playgroud)

我想知道如何用我的新类替换参数.

saa*_*nib 23

如果要替换导航堆栈的根视图控制器,可以将其视图控制器数组的第一个对象替换为 -

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];

NewViewController *nvc = [[NewViewController alloc] init];
[viewControllers replaceObjectAtIndex:0 withObject:nvc];
[self.navigationController setViewControllers:viewControllers];
Run Code Online (Sandbox Code Playgroud)


woo*_*121 5

^这些都是以编程方式执行此操作的方法.这很酷.但我在Xcode中使用界面构建器和故事板,因此这是添加新视图控制器的简单快捷的方法:

  • 打开有问题的故事板
  • 通过从对象列表(右侧工具栏底部)拖动它来将新视图控制器添加到故事板
  • 在按住CONTROL键的同时,单击并从导航控制器的中间(应为空白和灰色)拖动到新的白色视图.
  • 在弹出窗口中,选择Relation Segue:Root View Controller(应该低于您之前可能看到的普通push/modal/custom选项)

田田!享受新的根视图控制器,而无需通过编程创建来保持您的一天.

  • 但OP在点击按钮后询问"替换"RootViewController,因此这不是问题的答案. (4认同)