在没有xib的情况下在Cocoa Touch中以编程方式加载视图控制器和视图层级

问题描述:

似乎所有的Cocoa Touch模板都设置为加载一个nib。在没有xib的情况下在Cocoa Touch中以编程方式加载视图控制器和视图层级

如果我想启动一个新的项目,它将使用视图控制器,并以编程方式加载它的视图(层次结构),而不是从nib/xib,那么设置或调整模板的步骤是什么。

虽然我所要做的只是实现-loadView,但每次尝试执行此操作时都遇到困难。

+0

是的,你应该能够通过在loadView中初始化和添加你的视图和子视图来做你想做的事情。谨慎发布你的代码? – 2009-05-01 02:09:07

+0

我可以将笔尖垃圾并将plist主笔尖设置为零吗?当我这样做时,它会中断,导致预制AppDelegate被设置为加载主窗口并查看控制器笔尖。 – 2009-05-01 14:00:33

完全编程用户界面生成是相当简单的。首先,您需要编辑main.m,如下所示:

int main(int argc, char *argv[]) 
{ 
    NSAutoreleasePool *pool = [NSAutoreleasePool new]; 
    UIApplicationMain(argc, argv, nil, @"MyAppDelegate"); 
    [pool release]; 
    return 0; 
} 

其中MyAppDelegate是您的应用程序委托类的名称。这意味着MyAppDelegate的实例将在启动时创建,通常由应用程序的主要Nib文件处理。

在MyAppDelegate,实施你的applicationDidFinishLaunching:类似于下面的方法:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{  
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    if (!window) 
    { 
     [self release]; 
     return; 
    } 
    window.backgroundColor = [UIColor whiteColor]; 

    rootController = [[MyRootViewController alloc] init]; 

    [window addSubview:rootController.view]; 
    [window makeKeyAndVisible]; 
    [window layoutSubviews];  
} 

其中MyRootViewController是在窗口中的主视图的视图控制器。这应该初始化主窗口,并将由MyRootViewController管理的视图添加到它。 rootController作为实例变量保存在委托中,供以后参考。

这应该让你以编程方式通过MyRootViewController生成你的用户界面。

UIViews本身并没有层次结构,UINavigationControllers的确如此。因此,启动其中一个,并将UIViewController弹出到它的堆栈中。这应该以尽可能最基本的方式来完成,完全没有XIB文件。你应该能够建立在这个基础上。

- (void)applicationDidFinishLaunching:(UIApplication *)application {  
    UINavigationController *navController = [[UINavigationController alloc] init]; 

    UIViewController *viewController = [[UIViewController alloc] init]; 

    // set the properties of viewController here, to make it look like you want 

    [navController pushViewController:viewController animated:NO]; 

    [window addSubview:navController.view]; 

    // Don't forget memory management 
    [navController release]; 
    [viewController release]; 

    [window makeKeyAndVisible]; 
} 
+4

实际上,UIViews确实在屏幕上保持布局的层次结构,而不是您想要导航的同一类型的层次结构。 – 2009-05-01 14:04:08