我的应用程序是一个基于 View 的应用程序。我需要创建一个 UINavigationController
作为我的 rootViewController
。
在之前的 Xcode 版本中,有一个名为 mainWindow
的 xib 文件,我们可以在其中:
UIApplicationDelegate
实现连接到 UIApplication
的 delegate
导出 UIWindow
连接到 UIApplicationDelegate
UIViewController
连接到 UIWindow
的 rootViewController
属性。 但是现在(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
类,请在此处指定类:将
UIWindow
的 rootViewController
socket 连接到您的 UIViewController
:打开您的
UIApplicationDelegate
界面并创建或修改 window
属性以使其成为 IBOutlet
。切换到实现并删除任何设置窗口和根 View Controller 的“无值(value)”代码。 (我在这里讽刺......这个简洁的代码完成了我们在这里所做的一切......只是以编程方式而不是通过IB。)
切换回您的 xib 并连接您的
UIApplicationDelegate
的 window
socket 。现在,在目标的部署信息中,将您的 xib 设置为“主界面”:
完成了……嘘!