我的应用程序是一个基于 View 的应用程序。我需要创建一个 UINavigationController 作为我的 rootViewController

在之前的 Xcode 版本中,有一个名为 mainWindow 的 xib 文件,我们可以在其中:

  • 将我们的 UIApplicationDelegate 实现连接到 UIApplicationdelegate 导出
  • UIWindow 连接到 UIApplicationDelegate
  • UIViewController 连接到 UIWindowrootViewController 属性。

  • 但是现在(Xcode 4.2)不会创建这个 xib 文件!

    那么如何创建自定义 UINavigationController 并将其连接到 InterfaceBuilder 中的 UIApplicationDelegate 实现?

    这是我的 UIApplicationDelegate 实现中的代码:
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        SDWebImageRootViewController *root = [[SDWebImageRootViewController alloc] initWithNibName:nil bundle:nil];
    
        _navigationController = [[[UINavigationController alloc] initWithRootViewController:root] autorelease];
    
         self.window.rootViewController = _navigationController;
    
        [[_navigationController navigationBar] setBarStyle:UIBarStyleBlack];
        [[_navigationController navigationBar] setTranslucent:YES];
    
        [_window addSubview:[_navigationController view]];
    }
    

    最佳答案

    首先,是的,即使在最新版本的 Xcode 中,您仍然可以为此使用 IB,所以我不确定您从哪里获得它。

    如果您想知道如何在没有 IB 的情况下指定您的应用程序委托(delegate),那相当简单:

    在您的 main 方法中,只需使用您的应用程序委托(delegate)的类名作为 UIApplicationMain 的第四个参数:

    int main(int argc, char *argv[])
    {
        @autoreleasepool
        {
            int retVal =  UIApplicationMain(argc, argv, nil, @"APPLICATION_DELEGATE_CLASS_NAME");
            return retVal;
        }
    }
    

    事实上,当您从模板创建基于 View 的应用程序时,Xcode 4.2 默认为您执行此操作(尽管它不使用静态字符串......老实说这可能比我的建议更好,因为如果您使用内置的重构等):
    NSStringFromClass([AppDelegate class])
    回答您的后续问题:ok , then what should I do ? to connect the UINC outlet in interface ?
    不要打扰。

    还是不相信我?很好...这是一个教程...它是十五个步骤! ……而且完全没有意义。

    首先,创建应用程序:

    打开 main.m 并将第四个参数替换为 nil :

    创建一个新的 xib,或劫持现有的 xib(我将在这里做),并创建 File's Owner 类 UIApplication

    接下来,从工具箱中添加一个 Object 并将类更改为您的 UIApplicationDelegate 子类:

    现在,切换回 File's Owner 并将 delegate 导出连接到您添加的 UIApplicationDelegate。如果你正在做我所做的并劫持了现有的 xib,请删除 view 引用。

    现在从工具箱中添加一个 UIWindow

    现在添加一个 'UIViewController from the toolbox. This is your custom UIViewController . If you want a UINavigationController or UITableViewController` 只需添加它。

    如果使用自定义 UIViewController 类,请在此处指定类:

    UIWindowrootViewController socket 连接到您的 UIViewController :

    打开您的 UIApplicationDelegate 界面并创建或修改 window 属性以使其成为 IBOutlet

    切换到实现并删除任何设置窗口和根 View Controller 的“无值(value)”代码。 (我在这里讽刺......这个简洁的代码完成了我们在这里所做的一切......只是以编程方式而不是通过IB。)

    切换回您的 xib 并连接您的 UIApplicationDelegatewindow socket 。

    现在,在目标的部署信息中,将您的 xib 设置为“主界面”:

    完成了……嘘!

    10-07 19:55