在Xcode 4.2中使用Interface Builder的UIApplicationDelegate

4

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

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

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

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

那么我该如何在InterfaceBuilder中创建自定义的UINavigationController并将其连接到我的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]];
}
1个回答

8

首先,是的,即使在最新版本的Xcode中,您仍然可以使用IB进行此操作,所以我不确定您是从哪里获取的信息。

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

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

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

实际上,如果您从模板创建基于视图的应用程序,则Xcode 4.2会默认为您执行此操作(尽管它不使用静态字符串...实际上这可能比我的建议更好,因为如果您使用内置重构等,则会进行重构):
NSStringFromClass([AppDelegate class])
回答您的后续问题:ok,那我该怎么办?连接界面中的UINC出口? 别麻烦了。
还是不相信我? 好吧...这是一个教程...需要FIFTEEN步! ...而且完全没有意义。
首先,创建应用程序:
打开main.m并将第四个参数替换为nil
创建新的xib,或者劫持现有的xib(我要在这里这样做),并使文件所有者类为UIApplication
接下来,从工具箱中添加Object并将类更改为您的UIApplicationDelegate子类:
现在,切换回文件所有者并将delegate出口连接到您添加的UIApplicationDelegate。如果你像我一样劫持了现有的xib,请删除view引用。
现在从工具箱中添加一个UIWindow
现在从工具箱中添加一个'UIViewController'。 这是您的自定义'UIViewController'。 如果您想要'UINavigationController'或'UITableViewController`,只需添加即可。
如果使用自定义UIViewController类,请在此处指定该类:
UIWindowrootViewController出口连接到您的UIViewController
打开你的UIApplicationDelegate接口,创建或修改window属性,将其变为IBOutlet
转到实现部分,并删除任何设置窗口和根视图控制器的“无用”代码。(我这里是在讽刺...这个简洁的代码可以通过编程方式完成我们在此处所做的一切,而不是通过IB。)
回到你的xib文件,并连接你的UIApplicationDelegatewindow输出。
现在,在目标的部署信息中,将你的xib文件设置为“主界面”。
完成....大功告成!

2
+1,但我担心你所描述的讽刺地将会真的发生。 :( - Abizern
非常感谢!!我希望在扩展应用程序之前就做到这一点,我做了你所做的事情,但有两个问题:1-当我将文件所有者的类更改为UIApplication时,我的插座和操作出现了警告图标,2-我添加了NSObject,但...仍然无法识别我的应用程序委托中的插座。 - iOS.Lover
1
@Mc.Lover 1- 是的,因为那些不是UIApplication上的插座,而是你自定义视图控制器上的插座。把它们去掉。你将不得不在稍后的步骤中将它们连接到你添加的视图控制器上。2- 在添加NSObject之后,你必须更改类以指向你的应用程序委托。仔细阅读说明,并尝试理解每个步骤中正在做什么。 - Steve
你好,再次感谢你,Steve。你真的很谦虚,但是我做了你所做的一切!在启动应用程序后,应用程序收到了 SIGABRT 错误。 - iOS.Lover
1
@Mc.Lover,如果没有更多的细节,我不知道如何提供帮助。 - Steve
这是我创建的源代码链接,它是基于这个问题链接的最新情况。如果您能解决我的问题,我将不胜感激,非常感谢。 - iOS.Lover

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接