在没有xib的Cocoa Touch中以编程方式加载视图控制器和视图层次结构

问题描述 投票:7回答:2

似乎所有的Cocoa Touch模板都设置为加载一个笔尖。

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

我虽然只需要实现-loadView,但每次尝试这样做时都会遇到麻烦。

iphone cocoa-touch uikit uiviewcontroller
2个回答
16
投票

完全编程的用户界面生成相当简单。首先,您需要编辑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以编程方式生成用户界面。


3
投票

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];
}
© www.soinside.com 2019 - 2024. All rights reserved.