使用Xcode 4.2在Interface Builder中使用UIApplicationDelegate

Mc.*_*ver 4 iphone sdk xcode ipad ios

我的应用程序是基于视图的应用程序.我需要创建一个UINavigationController作为我的rootViewController.

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

  • 我们的连接UIApplicationDelegate实现对UIApplicationdelegate出口
  • 连接UIWindowUIApplicationDelegate
  • 连接UIViewControllerUIWindowrootViewController财产.

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

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

这是我的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]];
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 8

首先,是的,即使在最新版本的Xcode中,你仍然可以使用IB,所以我不确定你从哪里得到它.

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

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

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

实际上,当您从模板创建基于视图的应用程序时,Xcode 4.2默认为您执行此操作(尽管它不使用静态字符串...这可能比我的建议诚实,因为如果您将重构,它会被重构使用内置的重构等):

NSStringFromClass([AppDelegate class])

要回答您的后续问题: ok , then what should I do ? to connect the UINC outlet in interface ?

不要打扰.

还是不相信我?好......这是一个教程......这是FIFTEEN的步骤!......绝对毫无意义.

首先,创建应用程序:

在此输入图像描述

打开main.m并用以下内容替换第四个参数nil:

在此输入图像描述

创建一个新的xib,或者劫持现有的xib(我将在这里做),然后创建File的Owner类UIApplication.

在此输入图像描述

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

在此输入图像描述

现在,切换回文件所有者并将delegate插座连接到UIApplicationDelegate您添加的插座.view如果你正在做我做的事情并且劫持现有的xib,请删除引用.

在此输入图像描述

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

在此输入图像描述

现在添加一个'UIViewController from the toolbox. This is your customUIViewController . If you want aUINavigationController orUITableViewController`只需添加它.

在此输入图像描述

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

在此输入图像描述

将您UIWindowrootViewController插座连接到您的UIViewController:

在此输入图像描述

破解你的UIApplicationDelegate界面,制作或修改window属性使其成为一个IBOutlet.

在此输入图像描述

切换到实现并删除任何设置窗口和根视图控制器的"毫无价值"代码.(我在这里讽刺......这个简洁的代码完成了我们在这里所做的一切......只是通过编程而不是通过IB.)

在此输入图像描述

切换回你的xib并连接你UIApplicationDelegatewindow插座.

在此输入图像描述

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

在此输入图像描述

完成.... pshew!

  • +1,但我担心你所描述的具有讽刺意味的是真实的.:( (2认同)