我有一个通过项目向导设置的导航控制器.当前启动应用程序时,将自动创建并显示导航控制器.
我现在需要通过代码而不是通过.xib魔法来控制导航控制器的显示.如何禁用MainWindow.xib/RootViewController.xib的自动创建?我承认我实际上并不知道发生了什么以及MainWindow.xib和RootController.xib之间的关系,因为向导设置了所有这些.
这方面的任何参考或代码片段都会有所帮助..谢谢!
要在没有笔尖的情况下创建根导航控制器:
在您的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;
}Run Code Online (Sandbox Code Playgroud)
self.navigationController 指的是从MainWindow.xib加载的导航控制器(此文件的名称在您的应用程序的Info.plist文件中指定;请参阅下文).
打开MainWindow.xib并断开navigationControllerApp Delegate 的属性,然后删除Objects面板中的Navigation Controller(而不是Window)对象.
从navigationControllerApp Delegate的头文件中的@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;
}Run Code Online (Sandbox Code Playgroud)
要创建没有笔尖的主窗口:
你可能不需要这样做(我不推荐它),但是因为你(有点)问...
删除MainWindow.xib.
在main.m中,将UIApplicationMain的最后一个参数替换为App Delegate的名称(没有扩展名).例如:
int retVal = UIApplicationMain(argc, argv, nil, @"TestProjectAppDelegate");Run Code Online (Sandbox Code Playgroud)
打开Info.plist文件并删除以下两行:
<key>NSMainNibFile</key>
<string>MainWindow</string>Run Code Online (Sandbox Code Playgroud)
从windowApp Delegate的头文件中的@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...
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6548 次 |
| 最近记录: |