我有一个通过项目向导设置的导航控制器。目前,当应用程序启动时,导航控制器会自动创建并显示。
我现在需要通过代码而不是通过.xib魔法来控制导航控制器的显示。如何禁用MainWindow.xib / RootViewController.xib的自动创建?我承认我实际上并不知道发生了什么以及MainWindow.xib和RootController.xib之间的关系,因为向导设置了所有这些。
对此的任何参考或代码片段都会有所帮助.. 谢谢!
答案 0 :(得分:7)
创建没有笔尖的根导航控制器:
在您的App Delegate中,您应该看到以下内容:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
// Add the navigation controller's view to the window and display.
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
self.navigationController
是指从MainWindow.xib加载的导航控制器(此文件的名称在应用程序的Info.plist文件中指定;请参阅下文)。
打开MainWindow.xib并断开App Delegate的navigationController
属性,然后删除Objects面板中的Navigation Controller(而不是Window)对象。
从App Delegate的头文件中的navigationController
@property声明中删除IBOutlet属性(因为它将不再从nib文件连接)。
将App Delegate中的代码替换为以下内容:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
RootViewController *rootViewController = [[[RootViewController alloc] initWithNibName:nil bundle:nil] autorelease];
self.navigationController = [[[UINavigationController alloc] initWithRootViewController:rootViewController] autorelease];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
创建没有笔尖的主窗口:
你可能不需要这样做(我不建议这样做),但是因为你(有点)问过......
删除MainWindow.xib。
在main.m中,将UIApplicationMain的最后一个参数替换为App Delegate的名称(没有扩展名)。例如:
int retVal = UIApplicationMain(argc, argv, nil, @"TestProjectAppDelegate");
打开Info.plist文件并删除以下两行:
<key>NSMainNibFile</key>
<string>MainWindow</string>
从App Delegate的头文件中的window
@property声明中删除IBOutlet属性。
在App Delegate中创建窗口:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// The rest stays the same...
}