Segue modal, la barra de navegación desaparece

Estoy usando Xcode 4.6.1 para codificar en Objective-C. Quiero saber cómo puedo mantener la barra de navegación que se muestra cuando creo una transición modal entre 2 controladores de visualización, porque estoy haciendo la transición en el guión gráfico y cuando ejecuto la aplicación, la barra de navegación del segundo controlador de vista desaparece y Tengo un botón hecho en esa barra pero no puedo verlo.

Los segmentos modales se apoderan de toda la pantalla, por lo que las barras de navegación, las barras de herramientas o las barras de tabs que se encuentran en el controlador que presenta se cubrirán. Si desea una barra de navegación en este controlador modal, deberá agregar uno específicamente y agregar los botones que desee a esa nueva barra de navegación (o barra de herramientas). Si no quiere hacer esto, entonces no lo presente de forma modal, no lo presione.

Simplemente agregue otro Navigation Controller a su controlador de vista modal. Sigue los pasos

  1. Seleccione el Modal View Controller
  2. Ir al Editor menu
  3. Seleccione Embed In
  4. Seleccione el Navigation Controller

Ejecuta la aplicación. Ahora debería funcionar perfectamente.

Espero que esto resuelva tu problema.

Simplemente puede hacer lo siguiente para mostrar la barra de navegación:

C objective

 UINavigationController alloc]initWithRootViewController:modalVC]; 

SWIFT 3

 let modelVC = self.storyboard?.instantiateViewController(withIdentifier: "modalVC") as! ModalVC let navBarOnModal: UINavigationController = UINavigationController(rootViewController: modalVC) self.present(navBarOnModal, animated: true, completion: nil) 

Esto mostrará el controlador de vista modal con la barra de navegación. El conocimiento sobre Objective-C es limitado, así que no escribí la parte de la presentación. Deberías poder descifrarlo. 😉

¡Espero que esto ayude!

En iOS 8 hay un mejor método. Puede usar estilos de presentación adaptables:

  1. Use un segue “Present as popover”
  2. Configure su controlador para que adopte el protocolo UIPopoverPresentationControllerDelegate
  3. Implementar 2 métodos

C objective:

 - (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller { return UIModalPresentationFullScreen; } - (UIViewController *)presentationController:(UIPresentationController *)controller viewControllerForAdaptivePresentationStyle:(UIModalPresentationStyle)style { UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: controller.presentedViewController]; return navController; } 

Rápido:

 UIPopoverPresentationControllerDelegate func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { return UIModalPresentationStyle.FullScreen } func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? { var navController = UINavigationController(rootViewController: controller.presentedViewController) return navController } 

Swift 4:

 extension MyViewController: UIPopoverPresentationControllerDelegate { func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { return UIModalPresentationStyle.fullScreen } func presentationController(_ controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? { return UINavigationController(rootViewController: controller.presentedViewController) } } 

En preparación para el método segue configure al delegado:

  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { if let adpostVC = segue.destinationViewController as? XXXController { let popPC = adpostVC.popoverPresentationController popPC?.delegate = self 

versión rápida:

Sigue los pasos:

  1. Incrustar VC en NavigationController
  2. Reemplazar prepareForSegue ()

     override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "goToYourController" { let navigation: UINavigationController = segue.destinationViewController as! UINavigationController var vc = YourViewController.init() vc = navigation.viewControllers[0] as! YourViewController //if you need send something to destnation View Controller //vc.delegate = self } } 

Hay una manera más fácil de hacer esto. Al igual que en los comentarios anteriores (pero no explicó todos los pasos), debe incrustar el controlador de vista de destino deseado en un controlador de navegación, configurar el controlador de vista de destino como Controlador de navegación y luego el controlador de navegación llama al controlador de vista de destino.

Primero, incrusta el VC en un NavVC. Luego debe escribir el código para configurar el destino segue para que sea el Nav VC.

El código se ve así:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { UINavigationController *nav = segue.destinationViewController; AddTriviaVC *triv = [[AddTriviaVC alloc]init]; triv = nav.viewControllers[0]; triv.location = self.location; } 

Espero que esto tenga sentido.

Eso es probablemente porque no tienes un UINavigationController en tu modal. Debería usar uno (o simplemente agregar una barra de navegación a su ViewController en el Storyboard) y presentarlo de manera modal.

Puede agregar una barra de herramientas programáticamente haciendo lo siguiente en -(void)viewDidLoad

 NSInteger tbHeight = 50; tb = [[UIToolbar alloc] initWithFrame:CGRectMake(0, (self.view.frame.size.height - tbHeight), self.view.frame.size.width, tbHeight)]; tb.translucent = YES; emailButton = [[UIBarButtonItem alloc] initWithTitle:@"Email Results" style:UIBarButtonItemStyleBordered target:tvController action:@selector(actionSheet:)]; UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(doneButtonPressed:)]; NSArray *barButton = [[NSArray alloc] initWithObjects:emailButton,flexibleSpace,doneButton,nil]; [tb setItems:barButton]; [self.view addSubview:tb]; barButton = nil; 

Luego tendrá que crear un IBAction para presionar el botón hecho y se hace así:

 -(IBAction)doneButtonPressed:(id)sender { [self dismissModalViewControllerAnimated:YES]; } 

Eso debería darle lo que quiere con su controlador de vista modal.

en el guión gráfico, debe agregar un ítem de navegación a su nuevo control de visualización, luego agregar ítem de botón de barra para su botón de hecho