Caricamento di un controller di visualizzazione e amp; visualizza la gerarchia a livello di codice in Cocoa Touch senza xib

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

Domanda

Sembra che tutti i modelli Cocoa Touch siano impostati per caricare un pennino.

Se voglio iniziare un nuovo progetto che utilizzerà un controller di visualizzazione e caricare la sua vista (gerarchia) a livello di codice, non da un pennino / xib, quali sono i passaggi per impostarlo o regolare un modello.

Pensavo che tutto ciò che dovevo fare fosse implementare -loadView, ma ho problemi ogni volta che provo a farlo.

È stato utile?

Soluzione

È abbastanza semplice generare un'interfaccia utente completamente programmatica. Innanzitutto, è necessario modificare main.m in modo che sia simile al seguente:

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

dove MyAppDelegate è il nome della classe del delegato dell'applicazione. Ciò significa che verrà creata un'istanza di MyAppDelegate all'avvio, qualcosa che viene normalmente gestito dal file Nib principale per l'applicazione.

All'interno di MyAppDelegate, implementa applicationDidFinishLaunching: metodo simile al seguente:

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

dove MyRootViewController è il controller della vista per la vista principale nella finestra. Questo dovrebbe inizializzare la finestra principale e aggiungere la vista gestita da MyRootViewController. rootController viene mantenuto come variabile di istanza all'interno del delegato, per riferimento futuro.

Ciò dovrebbe consentire di generare a livello di programmazione la tua interfaccia utente tramite MyRootViewController.

Altri suggerimenti

Le stesse UIVview non hanno una gerarchia, come fanno UINavigationController. Quindi inizia uno di questi e fai apparire un UIViewController nel suo stack. Questo dovrebbe farlo, nel modo più semplice possibile, senza file XIB. Dovresti essere in grado di basarti su questo.

- (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];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top