uinavigationcontroller - Necesita ayuda para entender la nueva plantilla de aplicación de detalles maestros de Xcode 4.2
ios5 uisplitviewcontroller (1)
1) ¿Por qué necesito dos "UINavigationControllers"? ¿No podría simplemente crear la matriz "viewController" usando los controladores de vista "maestro" y "detalle"? "
No es necesario Pero es una forma. Usted tiene la capacidad de empujar el masterViewController
, así como el detailViewController
. Mira el diseño en Storyboard. Con el uso de segue puede cambiar los controladores de cada lado como desee.
2) ¿Qué significa configurar el "detailViewController" como el "delegado"? ¿Qué es lo que realmente se delega?
El UISplitView
get''s delegado. El detailViewController
se encargará de cambiar la interfaz en modo retrato y paisaje. Ver UISplitViewDelegate
en la documentación .
Mostrar y ocultar controladores de vista
– splitViewController:shouldHideViewController:inOrientation:
– splitViewController:willHideViewController:withBarButtonItem:forPopoverController:
– splitViewController:willShowViewController:invalidatingBarButtonItem:
– splitViewController:popoverController:willPresentViewController:
3) Y, por último, si quisiera insertar elementos adicionales en la pila "DetailViewController", ¿usaría la clase "DetailViewController" para usar el método "didSelectRow ..", o tendría que hacer actualizaciones de self.splitViewController? ¿La propiedad .viewControllers en su lugar?
Sí, puede insertar el masterViewController
con la selección tableView. Puede presionar cualquiera con el nuevo controlador en la pila masterViewController
presionando en el
- (void)viewDidAppear:(BOOL)animated
y puedes empujar como quieras. No es necesario que actualice la propiedad self.splitViewController.viewControllers
. Tal vez tenga que configurar el delegado en su nuevo detailViewController
.
Tengo problemas para entender cómo funcionan todos los "aspectos prácticos" de la plantilla de aplicación de detalles maestros con Xcode 4.2 (sin MainWindow.xib, así como otros cambios). En "AppDelegate" tenemos el siguiente código:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil];
UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];
self.splitViewController = [[UISplitViewController alloc] init];
self.splitViewController.delegate = detailViewController;
self.splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController, detailNavigationController, nil];
self.window.rootViewController = self.splitViewController;
[self.window makeKeyAndVisible];
return YES;
}
Veo que la ventana se crea mediante programación en lugar de utilizar MainWindow.xib que se usó en versiones anteriores de Xcode al principio, así como crear instancias de objetos para las clases de controlador de vista "Maestro" y "Detalle" que se proporcionan con la plantilla y usarlos para UINavigationControllers separados. A continuación, a la propiedad splitViewController se le asigna un nuevo objeto asignado UISplitViewController que asigna el detalleViewController como el "delegado" y se crea una matriz que contiene tanto UINavigationControllers como "viewControllers". Luego, a window.rootViewController se le asigna este objeto splitViewController.
Las principales preguntas que tengo son
1) ¿Por qué necesito dos "UINavigationControllers"? ¿No podría simplemente crear la matriz "viewController" usando los controladores de vista "maestro" y "detalle"? "
2) ¿Qué hace si se configura "detailViewController" como "delegado"? ¿Qué es lo que realmente se delega?
3) Y, por último, si quisiera insertar elementos adicionales en la pila "DetailViewController", ¿usaría la clase "DetailViewController" para usar el método "didSelectRow ..", o tendría que hacer actualizaciones de self.splitViewController? ¿La propiedad .viewControllers en su lugar?