5

Este parece ser el patten utilizado en todas las aplicaciones de manzanas; La creación de un nuevo registro se realiza a través de una Vista modal que debe guardarse o cancelarse para continuar, y la edición de un registro se realiza a través de una vista insertada en la pila de navegación.¿Debo usar el mismo detalle ViewController para trabajar de forma modal y cuando me presionen?

No parece correcto duplicar mi ViewController para 'agregar' y 'editar', pero hay varias diferencias en cómo funcionan los ViewControllers forzados y modales que complican las cosas.

¿Cómo debo estar haciendo esto para que pueda cubrir ambas bases?

-

Las diferencias incluyen.

Cuando se lo coloca en la pila, el navBar aparece en la parte superior de la Vista y se puede configurar para que contenga los botones cancelar/guardar. Cuando se presenta de forma modal, este no es el caso, por lo tanto, para duplicar la interfaz, se debe crear una barra de herramientas por separado y, en su lugar, cerrar/guardar botones.

al despedir una vista empujado enviamos un mensaje al controlador de navegación [self.navigationController popViewControllerAnimated:YES];, al despedir a una vista modal enviamos un mensaje a la libre [self dismissModalViewControllerAnimated:YES];

+1

¿Cómo exactamente se "complica las cosas" entre empujar y presentando modal? –

+0

Pregunta editada con más detalles – trapper

+3

Lo abordaría definiendo un protocolo (trapperDismisser) que permitiera al controlador de vista indicar que estaba listo para ser descartado. Luego, cumpla trapperViewDismisser y configure delegate en self. Esto mueve las diferencias a la clase que muestra el VC (que ya conoce las diferencias de todos modos). – Thompsonian

Respuesta

0

Se podría añadir el UIToolbar en InterfaceBuilder, y luego simplemente esconderlo en viewDidLoad cuando auto.navigationController no es nulo.

En cuanto a despedir, usted podría tener algo como:

- (void)didCancel { 
    [self.navigationController popViewControllerAnimated:YES] || [self dismissModalViewControllerAnimated:YES]; 
} 

Este será un corto circuito si su viewcontroller es parte de un NavigationControl, y utilizar dismissModalViewControllerAnimated lo contrario.

Esto debería funcionar para su botón cancelar. Para su botón de guardar, es útil para llamar a algún tipo de método delegado tales como:

- (void)didSave { 
    // do your saving juju here 
    if([self.delegate respondsToSelector:@selector(viewController:didSave:]) { 
     [self.delegate viewController:self didSave:whatJustGotSaved]; 
    } 
    [self.navigationController popViewControllerAnimated:YES]; // noop if currently modal 
} 

En aplicación del delegado a continuación, puede poner:

- (void)viewController:(UIViewController*)viewController didSave:(NSObject*)whatJustGotSaved { 
    // do stuff with parameters 
    [self.modalViewController dismissModalViewControllerAnimated:YES]; // noop if not modal 
} 
Cuestiones relacionadas