2012-05-31 13 views
5

Quiero crear una vista modal con el elemento de navegación (vista derecha en mi captura de pantalla) y quiero que tenga un "botón Atrás". Mi aplicación es la aplicación TabBar y no quiero que esta vista tenga una barra de pestañas, pero quiero cargar una vista previa (vista izquierda en mi captura de pantalla) con un segue similar al tipo "presionar". Solo puedo crear una transición de inserción para proporcionar una navegación hacia la derecha de la vista de la izquierda; si está cargada como una vista modal, la Barra de navegación & TabBar ya no está. ¿Alguna solución para esto? ¡Gracias de antemano!Crear una vista modal con la barra de navegación y el botón Atrás

Here's my screenshot

+0

¿Qué tiene de malo presentar una vista modal (a la derecha) y tener un botón Atrás para cerrarla y volver al UITableView que se muestra a la izquierda? – tarheel

+0

Porque es un UIWebView con contenido dinámico y quiero que el botón Atrás esté en la barra de navegación –

Respuesta

12

Simplemente ponga una barra de navegación en la nueva vista con un elemento de botón de barra. Cree una acción para el elemento del botón de barra arrastrando el control del elemento del botón de barra al .h del controlador de vista. A continuación, puede utilizar un método delegado y el protocolo para decirle al primer controlador cuando el botón ha sido presionado y tiene que utilizar [self dismissModalViewControllerAnimated:YES];

Así que en su segundo punto de vista de crear un protocolo con un método de hecho, como este:

@protocol SecondViewControllerDelegate <NSObject> 

-(void) done; 

@end 

@interface SecondViewController : UIViewController { 
    ... 
    id delegate; 
} 

... 

@property (nonatomic, assign) id<SecondViewControllerDelegate> delegate; 

-(IBAction)done:(id)sender; //this will be linked to your nav bar button. 
@end 

entonces en su acción desde el botón de llamada esto:

-(IBAction)done:(id)sender{ 
    [self.delegate done]; 
} 

su primer controlador de vista necesitarán para implementar el protocolo <SecondViewControllerDelegate>

luego en su primer controlador de vista, configúrelo como un delegado para su segundo controlador de vista antes de realizar la transición.

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([[segue identifier] isEqualToString:@"Second View Modal Segue Identifier"]) 
    { 
     SecondViewController *viewController = segue.destinationViewController; 
     viewController.delegate = self; 
    } 
} 

por último, coger la llamada hecha por el delegado en su primer controlador de vista:

-(void) done 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

Así es como yo lo he hecho. Si no tienes mucha experiencia con protocolos y delegados, puede parecer confuso al principio, pero me ha funcionado bien.

+0

discúlpeme si hay algún error tipográfico, lo escribí todo desde el principio. –

6

Tendrá que envuelva a su controlador de vista lado derecho en un nuevo controlador de navegación. En IB, selecciónelo y elija la opción de menú Editor -> Embed In -> Navigation Controller e IB mostrará una barra de navegación que puede personalizar al contenido de su corazón.

+0

¿Esto me permite presentarlo como una vista modal? –

+0

Sí, de hecho. En el iPad puede tener esta es la vista más pequeña y centralizada. Tienes que implementar tus propios botones en la barra de navegación para descartarlos. – Mundi

+1

Gracias. En iOS 7, si solo arrastro la barra de navegación, se verá mal, ya que el fondo de la "barra de tiempo", a diferencia de la barra de navegación, no tiene fondo gris. Pero este método resolvió el problema y parece más elegante. –

Cuestiones relacionadas