2011-04-12 5 views
6

Tengo un proyecto de plantilla SplitView. Quiero cambiar DetailView en el usuario que selecciona el elemento en RootViewController.iOS: ¿Cómo cambiar dinámicamente DetailView en la plantilla SplitView?

De hecho, no puedo simplemente cambiar lo que hay dentro de esa vista (DetailView) como se hace en la plantilla (cuando marque "usar core data data" en la creación del proyecto). Quiero cambiar entre vistas completas.

lo he intentado:

AppDelegate *appDelegate = [UIApplication sharedApplication].delegate; 
[appDelegate.detailViewController setView:curretnDetailViewController.view]; 
appDelegate.detailViewController = currentDetailViewController; 

Por cierto que no entiendo por qué necesito la línea # 2 (..setView: ..)? ¿Por qué asignar DetailViewController (línea 3) no es suficiente? -. Código ve horrible = (

Pero de todos modos que no funciona exactamente como yo quiero Todo excepto DetailView desaparece como he cambiado la vista principal, no sólo de DetailViewController

supongo que debería cambiar algo en. splitViewController pero no averiguar qué = (

Gracias por su atención.

Respuesta

18

yo también tenía sus preguntas acerca de hace una semana y yo también tengo poca ayuda en este foro. Espero que pueda cambiar eso para usted

Primero, ¿sabías que Apple tiene un ejemplo de Vista detallada múltiple? Está aquí Apple Examples

Tienes que entender lo que es un controlador splitview para hacerte una idea de lo que Apple está haciendo. Piense en el controlador de vista dividida como un contenedor dentro de la ventana de su dispositivo. Este contenedor tiene 2 compartimentos, un lado izquierdo delgado y un lado derecho más grande. Ahora, para cambiar de lado, debe reemplazar este compartimento por otro de tamaño y naturaleza similar. No puedes poner allí un compartimento que no se ajusta o que hace algo elegante porque simplemente no cabría.

En la conversación técnica, encuentre este código a continuación en el ejemplo. El controlador de vista dividida tiene una matriz de 2 vistas y puede cambiar las vistas en esta matriz. Por lo tanto, en esta matriz hay 2 vistas, la izquierda se llama navigationcontroller y la derecha es detailviewcontroller. Si asigna e inicia una vista y la agrega a cualquiera de estos dos, esta vista reemplazará la vista actual en el controlador splitviewcontroller.

NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailViewController, nil]; 
splitViewController.viewControllers = viewControllers; 

ahora a la segunda parte de su pregunta - que creo que es desde el lado izquierdo que desea ser capaz de ser siempre capaz de elegir algo y ser capaz de cambiar el lado derecho .... estoy en lo cierto?

He leído tres formas diferentes de hacer esto y no he visto a nadie que diga que una es mejor que la otra.

  1. configura una notificación, por lo que al hacer clic en algo a la izquierda se envía una noticiación a la derecha.
  2. Cuando comience con la vista inferior o de la raíz del lado izquierdo, tendrá una referencia en el lado derecho, si agrega subvistas, etc. a la izquierda, siempre pasa a lo largo de una referencia al lado derecho.
  3. La forma en que lo hice fue configurar un protocolo en el delegado de la aplicación o en el delegado de la vista de root, luego en una vista que quiero hablar con el lado derecho usa este protocolo y el lado derecho implementa este protocolo.Esto último lo aprendí, ya que es un método preferido para obtener vistas modales para hablar con otras opiniones.

No soy un experto, así que no he agregado código para cada una de las 3 opciones anteriores, lo que sugiero es que busques un poco de google para los temas y verás ejemplos. Si realmente te quedas atascado en uno, házmelo saber y trataré de encontrar de nuevo con google los ejemplos que he encontrado en el pasado. El menos complicado, creo que es el No.1.

Espero que esto lo lleve en la dirección correcta.

+1

¿Alguna posibilidad de que todavía tenga el ejemplo del tercer método que mencionó anteriormente? – JimmyP

Cuestiones relacionadas