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

时间:2011-04-29 03:45:08

标签: objective-c xcode interface-builder xib nib

我有一个在XCode中使用“基于导航的应用程序”模板的应用程序。

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

据我所知,有人用我的RootViewController调用它:

- (id)initWithRootViewController:(UIViewController *)rootViewController

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

3 个答案:

答案 0 :(得分:23)

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

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

NewViewController *nvc = [[NewViewController alloc] init];
[viewControllers replaceObjectAtIndex:0 withObject:nvc];
[self.navigationController setViewControllers:viewControllers];

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:2)

查看主应用程序委托.m文件并找到方法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

里面会是这样的一行

self.window.rootViewController = self.navigationController;

您可以在那里实例化一个不同的视图控制器并将其指定为rootViewController