martes, 13 de agosto de 2013

Utilización de diferentes versiones del Storyboard

Con el nuevo aspecto del interface en el iOS 7, probablemente os habréis encontrado con que vuestras aplicaciones diseñadas para versiones anteriores no quedan bien.

Para evitar tener que rediseñar toda la aplicación para que tenga la misma apariencia en todas las versiones de iOS, se pueden crear dos (o los necesarios) storyboards, uno para la versión 7 y posteriores y otro para las anteriores. De esta forma se consigue que los usuarios que migren a la nueva versión del iOS tengan un interfaz acorde con el aspecto del iOS 7 pero, los que no migren, mantengan la apariencia de las versiones anteriores con el que ya están familiarizados.

Lo primero que tenemos que hacer es asegurarnos que, dentro de la pestaña General,  el Main interface está vacío. De esta forma no asignamos ningún storyboard por defecto.



Después haremos una copia del storyboard actual a la que vamos a llamar, por ejemplo iPhoneiOS7.storyboard. A la versión actual la renombraremos a iPhoneiOS6.storyboard.



Es conveniente también que en el File inspector, se seleccionen las siguientes opciones para cada storyboard.

iPhoneiOS6.storyboard

iPhoneiOS7.storyboard

En el AppDelegate, añadiremos el siguiente código dentro del application:willFinishLaunchingWithOptions:


UIStoryboard *mainStoryboard = nil;

if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] == NSOrderedAscending)
{
    // Versiones anteriores a iOS 7
    // Instaciamos un objeto storyboard usando el archivo iPhoneiOS6.storyboard
    mainStoryboard = [UIStoryboard storyboardWithName:@"iPhoneiOS6" bundle:nil];
    
}
else
{
    // Versiones iguales o posteriores a iOS 7
    // Instaciamos un objeto storyboard usando el archivo iPhoneiOS7.storyboard
    mainStoryboard = [UIStoryboard storyboardWithName:@"iPhoneiOS7" bundle:nil];
    
}

// Instanciamos un objeto UIWindow y lo inicializamos con el tamaño de pantalla del dispositivo
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

// Hacemos que el initialViewController sea el rootviewcontroller
self.window.rootViewController = [mainStoryboard instantiateInitialViewController];

Además, en el application:didFinishLaunchingWithOptions: añadiremos la siguiente línea de código justo antes del return:

[self.window makeKeyAndVisible];


Con esto, lo que faltaría sería modificar el iPhoneiOS7.storyboard para adaptarlo al interfaz de la nueva versión del iOS. Una vez modificado se ejecutaran diferentes storyboards según la versión de iOS en la que se ejecute la App.

@Fin

No hay comentarios:

Publicar un comentario