Cargando un controlador de vista & amp; ver jerarquía programáticamente en Cocoa Touch sin xib

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

Pregunta

Parece que todas las plantillas de Cocoa Touch están configuradas para cargar una punta.

Si quiero comenzar un nuevo proyecto que usará un controlador de vista y cargará su vista (jerarquía) programáticamente, no desde un nib / xib, ¿cuáles son los pasos para configurarlo o ajustar una plantilla?

Pensé que todo lo que tenía que hacer era implementar -loadView, pero tengo problemas cada vez que intento hacer esto.

¿Fue útil?

Solución

Es razonablemente simple hacer una generación de interfaz de usuario completamente programática. Primero, necesita editar main.m para que se vea más o menos así:

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

donde MyAppDelegate es el nombre de la clase delegada de su aplicación. Esto significa que se creará una instancia de MyAppDelegate en el lanzamiento, algo que normalmente es manejado por el archivo Nib principal para la aplicación.

Dentro de MyAppDelegate, implemente su applicationDidFinishLaunching: método similar al siguiente:

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

donde MyRootViewController es el controlador de vista para la vista principal en su ventana. Esto debería inicializar la ventana principal y agregarle la vista administrada por MyRootViewController. rootController se mantiene como una variable de instancia dentro del delegado, para referencia posterior.

Esto debería permitirle generar mediante programación su interfaz de usuario a través de MyRootViewController.

Otros consejos

Las UIViews en sí mismas no tienen una jerarquía, las UINavigationControllers sí. Entonces inicie uno de esos y coloque un UIViewController en su pila. Esto debería hacerlo, de la manera más básica posible, sin ningún archivo XIB. Deberías poder construir sobre esto.

- (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];
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top