Загрузка контроллера вида и иерархии вида программно в Cocoa Touch без xib - PullRequest
7 голосов
/ 01 мая 2009

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

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

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

Ответы [ 2 ]

16 голосов
/ 01 мая 2009

Совершенно программная генерация пользовательского интерфейса достаточно проста. Во-первых, вам нужно отредактировать 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 голосов
/ 01 мая 2009

Сами 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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...