【发布时间】:2014-12-27 00:18:42
【问题描述】:
我刚刚继承了一个使用 Storyboard + nibs 的项目。
Storyboard 将导航控制器设置为初始视图控制器,然后将第一个视图控制器设置为其根。很简单。
我决定创建一个新的视图控制器并将其作为新的根控制器。我仍然有旧的根视图控制器,它不再是根了。所以为了速度,我删除了导航控制器,选择了我的新根视图控制器,并将其嵌入到导航控制器中。
完美运行。这是我不明白的...
我的设置看起来与之前相同,但我必须将以下内容添加到应用委托:
LaunchController *launch = [[LaunchController alloc] initWithNibName:@"LaunchController" bundle:nil];
UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:launch];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window setRootViewController:navigation];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
为什么我必须添加这个,但以前的版本不需要它,即使我觉得我所做的更改仍然保持设置与我之前的设置相同?
在整个应用程序中,performSegueWithIdentifier 被调用,现在那些总是失败并说“Receiver has no segue with identifier”。
如果我从应用程序委托中删除上述代码,那么我的既是 nib 又是 Storyboard 的根控制器不会显示在屏幕上。它加载,但你看不到任何东西。但是,现在我所有的 segues 都可以工作了。
那么这里发生了什么?我意识到在创建新的导航控制器和根视图控制器时我可能搞砸了,但我想不通。
我花了更多时间使用 nib,并且我一直在添加上面的应用程序委托代码,所以我什至不明白之前的开发人员是如何在没有该代码的情况下首先完成这项工作的应用委托。
非常感谢任何帮助。
【问题讨论】:
标签: ios objective-c uinavigationcontroller segue uistoryboard