【问题标题】:iOS - loading navigation controller via codeiOS - 通过代码加载导航控制器
【发布时间】:2011-05-25 03:37:44
【问题描述】:

我有一个通过项目向导设置的导航控制器。目前,当应用程序启动时,导航控制器会自动创建并显示。

我现在需要通过代码而不是通过 .xib 魔法来控制导航控制器的显示。如何禁用 MainWindow.xib/RootViewController.xib 的自动创建?我承认我实际上并不知道发生了什么以及 MainWindow.xib 和 RootController.xib 之间的关系,因为向导设置了这一切。

对此的任何参考或代码sn-ps都会有所帮助.. 谢谢!

【问题讨论】:

    标签: ios xib


    【解决方案1】:

    要创建没有 nib 的根导航控制器:

    在您的 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 属性,然后删除对象面板中的 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...
    }

    【讨论】:

      猜你喜欢
      • 2012-03-06
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多