Para universal - iPhone + iPad - aplicaciones se puede especificar que la carga diferentes ONE en cada plataforma, ya sea en el panel Información de destino o añadiendo NSMainNibFile~ipad
y NSMainNibFile~iphone
llaves de su Info.plist
. Como alternativa, puede agregar un NIB MainWindow~ipad.xib
a su destino, se cargará en el iPad en lugar de MainWindow.xib
, según la clave NSMainNibFile
en Info.plist.
Si necesita más control y personalización para una aplicación Universal, puede cargar el NIB de inicio manualmente. La plantilla del proyecto "Universal" tiene la plantilla estándar para este método, por lo que la forma más rápida de comenzar a usar esta técnica es crear un nuevo proyecto de iOS con el perfil Universal.
En los ejemplos anteriores, el Main NIB File
se configura en Info.plist
(configuración de destino) para que ya tenga un NIB cargado cuando se invoca su delegado de aplicación. Por lo general, en esta configuración, un objeto MyAppDelegate
también se archivará en el NIB (con algunos IBOutlets
) y el NIB File's Owner
se establecerá en UIApplication
.
Para que un proyecto universal pueda acomodar dos diseños alternativos, la clave principal del archivo NIB queda fuera de Info.plist
. A continuación, se crea una instancia del objeto de aplicación delegado mediante programación en UIApplicationMain
:
#import "MYAppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MYAppDelegate class]));
}
}
A continuación, compruebe su entorno y la configuración y la carga de la SEMILLA apropiado en application:DidFinishLaunchingWithOptions:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
_window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
_viewController = [[[MYViewController alloc] initWithNibName:@"MYViewController_iPhone" bundle:nil] autorelease];
} else {
_viewController = [[[MYViewController alloc] initWithNibName:@"MYViewController_iPad" bundle:nil] autorelease];
}
_window.rootViewController = _viewController;
[_window makeKeyAndVisible];
return YES;
}
- (void)dealloc {
[_window release];
[_viewController release];
[super dealloc];
}
El nuevo paso es crear una raíz MYViewController
manualmente, carga el NIB apropiado. En esta configuración, el File's Owner
es su nuevo MYViewController
brillante en lugar de UIApplication
. Si lo desea, MYViewController
puede adoptar gran parte de lo que pudo haber sido la utilización de su delegado solicitud de - que a menudo es encapsular la clase del modelo básico de la aplicación, actúan como una fuente de datos y delegado de los puntos de vista y otras cosas en el BNI.
Así que se espera que tenga una raíz UIView
en el SEMILLA, y debe ser conectado a la salida de la view
File's Owner
(MYViewController
).
Tenga en cuenta que la SEMILLA de MYViewController no se carga realmente hasta que la primera vez que se accede a la propiedad MYViewController.view
. ¡Solo entonces se llamará al [MyViewController viewDidLoad]
! El momento más probable para que esto ocurra es cuando lo agrega a la ventana raíz.
En el código de plantilla que se muestra arriba, el delegado de la aplicación crea una instancia de la raíz UIWindow
, pero no hay ninguna razón para no incluirla en su NIB. Si eliges hacer esto, ten cuidado. Si configura el rootViewController
de la ventana en la NIB para el propietario del archivo en ese caso, hará que la vista del controlador se agregue a la ventana cuando se active la ventana. Tenga cuidado al construir ese primer NIB en cualquier caso.
El delegado de la aplicación no necesita necesariamente tener una referencia a su raíz UIWindow
si desea que MYViewController lo administre, pero puede ser más general para mantener la ventana raíz fuera de sus NIB y administrarla en el delegado de la aplicación .
Fuera de eso (!) No hay mucho diferente del enfoque de plataforma única.
¡correcto! "DidFinishLaunchingWithOptions" es el primer método para ejecutar! –