Chargement d'un contrôleur de vue & amp; afficher la hiérarchie par programme dans Cocoa Touch sans xib

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

Question

Il semble que tous les modèles Cocoa Touch sont configurés pour charger une pointe.

Si je veux démarrer un nouveau projet qui va utiliser un contrôleur de vue et charger sa vue (hiérarchie) par programme, et non depuis un nib / xib, quelles sont les étapes à suivre pour configurer ou ajuster un modèle.

Je pensais que tout ce que je devais faire était d'implémenter -loadView, mais j'ai des problèmes chaque fois que j'essaie de le faire.

Était-ce utile?

La solution

Il est relativement simple de créer une interface utilisateur entièrement programmatique. Tout d’abord, vous devez modifier main.m pour ressembler à ce qui suit:

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

où MyAppDelegate est le nom de votre classe de délégué d'application. Cela signifie qu'une instance de MyAppDelegate sera créée au lancement, quelque chose qui est normalement géré par le fichier Nib principal de l'application.

Dans MyAppDelegate, implémentez votre méthode applicationDidFinishLaunching: similaire au suivant:

- (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];    
}

où MyRootViewController est le contrôleur de vue pour la vue principale de votre fenêtre. Cela devrait initialiser la fenêtre principale et y ajouter la vue gérée par MyRootViewController. rootController est conservé en tant que variable d'instance dans le délégué pour référence ultérieure.

Cela devrait vous permettre de générer par programmation votre interface utilisateur via MyRootViewController.

Autres conseils

UIViews eux-mêmes n’ont pas de hiérarchie, contrairement à UINavigationControllers. Donc, lancez-en un et insérez un UIViewController dans sa pile. Cela devrait le faire, de la manière la plus élémentaire possible, sans aucun fichier XIB. Vous devriez pouvoir vous appuyer sur cela.

- (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];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top