Программная загрузка контроллера представления и иерархии представлений в Cocoa Touch без xib

StackOverflow https://stackoverflow.com/questions/809898

Вопрос

Кажется, что все шаблоны Cocoa Touch настроены на загрузку пера.

Если я хочу начать новый проект, который будет использовать контроллер представления, и загружать его представление (иерархию) программно, а не из nib/xib, каковы шаги по его настройке или настройке шаблона.

Я думал, что все, что мне нужно было сделать, это реализовать -loadView, но каждый раз, когда я пытаюсь это сделать, у меня возникают проблемы.

Это было полезно?

Решение

Достаточно просто создать полностью программную генерацию пользовательского интерфейса.Во-первых, вам нужно отредактировать файл 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 реализуйте свое приложениеDidFinishLaunching:метод, аналогичный следующему:

- (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];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top