uipopoverpresentationcontroller present modally modal ios storyboard modal-dialog

ios - present - ¿Cuál es la forma correcta de descartar un modal al usar storyboards?



swift present view controller programmatically (6)

Usando guiones gráficos, ¿cuál es la forma correcta de descartar un modal?

  • ¿Cómo usar IBAction y escribir código para descartar después de hacer clic en un botón?
  • ¿usar segue y notificar al controlador de vista padre después de hacer clic en un botón?

Como lo indica la documentación en línea de Apple, el controlador de vista que presenta es responsable de descartar la vista modal (presentada).

Hay una publicación y un ejemplo disponibles here


Descubrí que, generalmente, cuando intento hacer esto en el guión gráfico, prefiero no crear clases adicionales. Todavía tiene sentido realizar el descarte desde el controlador de vista de presentación, por lo que requiere una clase para respaldarlo.

Si crea un IBAction en el controlador de vista de presentación y lo nombra apropiadamente, por ejemplo

- (IBAction)dismissAnyModel:(id)sender { [self dismissViewControllerAnimated:YES completion:nil]; }

Luego, desde el guión gráfico donde quiera desencadenar el descarte, cree una acción para el primer respondedor, como se muestra a continuación. Puede ampliar esto para que funcione con múltiples controladores de vista de presentación creando nombres únicos para las IBActions.

Más información sobre el primer respondedor y la cadena de respuesta


Para hacer esto dentro de UIStoryboard primero necesitas crear un objeto del tipo UIStoryboardSegue en tu proyecto

Luego inserte el siguiente método dentro de la clase. Aquí está mi clase

@implementation DismissController

- (void)perform{ UIViewController *sourceVC = self.sourceViewController; [sourceVC.presentingViewController dismissViewControllerAnimated:YES completion:nil]; }

Ahora puedes usarlo dentro de tu UIStoryboard . Seleccione el botón que debe hacer que UIViewController desaparezca y arrástrelo al UIViewController que desea ir. En mi caso, muestra ** despedir a Controller * debido al nombre de mi clase.

Selecciónalo y listo! También hay una muy buena explicación en este sitio web.


Según la respuesta de Alex Cio para Swift 3 y XCode 8.3 :

Crear clase:

import UIKit class DismissSegue: UIStoryboardSegue { override func perform() { self.source.presentingViewController?.dismiss(animated: true, completion: nil) } }

Pero en el guión gráfico debes elegir:

Acción Segue -> Personalizado -> descartar

Solo después de que esta opción aparezca en el menú Action Segue


Vea mi respuesta here . Le da dos maneras de descartar el controlador de vista modal con guión gráfico. Me gusta el método dos que se describe porque si agregas la clase en tu proyecto, tu retorno de las vistas modales se puede hacer sin código usando el guión gráfico solo. Dicho esto, si ha implementado un protocolo delegado y delegado, también es un buen lugar para colocar la instrucción dismissModalViewController.


Ver aquí Descartar un controlador de vista presentado a mitad de camino

Cuando llega el momento de descartar un controlador de vista presentado, el enfoque preferido es dejar que el controlador de vista presente lo descarte.

Por lo tanto, debe usar un código de IBAction y de escritura para descartar después de hacer clic en un botón.