Pregunta

Puede alguien darme el código de ejemplo que puede utilizar para presentar por primera vez un controlador de vista modal, luego descartarlo? Esto es lo que he estado intentando:

    NSLog(@"%@", blue.modalViewController);
    [blue presentModalViewController:red animated:YES];
    NSLog(@"%@", blue.modalViewController);
    [blue dismissModalViewControllerAnimated:YES];
    NSLog(@"%@", blue.modalViewController);
Este es el código de viewDidLoad ( "azul" y "rojo" son las dos subclases de UIViewController). Espero que voy a mostrar la vista de rojo y luego inmediatamente ocultarlo, con un poco de animación. Sin embargo, este trozo de código sólo se presenta la vista modal y no descartarla. ¿Alguna idea? El primer registro muestra "nulo", mientras que los otros dos registros muestran
Otro punto es, si pongo este código en applicationDidFinishLaunching: la vista roja no aparece en absoluto, y obtener todos los registros "nulo"

¿Fue útil?

Solución

En primer lugar, cuando se pone ese código en applicationDidFinishLaunching, podría darse el caso de que los controladores instanciados de Interface Builder aún no están vinculados a su aplicación (por lo que "rojo" y "azul" siguen siendo nil).

Pero para responder a su pregunta inicial, lo que estás haciendo mal es que usted está llamando dismissModalViewControllerAnimated: en el controlador equivocado! Debe ser como la siguiente:

[blue presentModalViewController:red animated:YES];
[red dismissModalViewControllerAnimated:YES];

Por lo general, el controlador "rojo" también se decidirá a rechazarse a sí mismo en algún momento (tal vez cuando se hace clic en un botón "cancelar"). A continuación, el controlador de "rojo" podría llamar al método de self:

[self dismissModalViewControllerAnimated:YES];

Si aún así no funciona, que podría tener algo que ver con el hecho de que el controlador se presenta de una forma de animación, por lo que no podría ser permitido para despedir el controlador tan pronto después de su presentación.

Otros consejos

La forma más fácil i cansado en Xcode 4,52 era crear una vista adicional y conectarlos mediante el uso de modos de transporte segue (control arrastre el botón de vista de cada uno a la segunda vista, eligió modal). A continuación, arrastre en un botón para segundo punto de vista o la vista modal que ha creado. Control y arrastrar este botón para el archivo de cabecera y el uso de conexión de la acción. Esto creará una IBAction en su archivo Controller.m. Encuentra su botón de tipo de acción en el código.

[self dismissViewControllerAnimated:YES completion:nil];

Swift

Actualización de Swift 3

 introducir descripción de la imagen aquí

Storyboard

Cree dos controladores de Vista con un botón en cada uno. Para el segundo controlador de vista, establecer el nombre de la clase a SecondViewController y el ID de guión gráfico para secondVC.

Código

ViewController.swift

import UIKit
class ViewController: UIViewController {

    @IBAction func presentButtonTapped(_ sender: UIButton) {

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let myModalViewController = storyboard.instantiateViewController(withIdentifier: "secondVC")
        myModalViewController.modalPresentationStyle = UIModalPresentationStyle.fullScreen
        myModalViewController.modalTransitionStyle = UIModalTransitionStyle.coverVertical
        self.present(myModalViewController, animated: true, completion: nil)
    }
}

SecondViewController.swift

import UIKit
class SecondViewController: UIViewController {

    @IBAction func dismissButtonTapped(_ sender: UIButton) {
        self.dismiss(animated: true, completion: nil)
    }
}

Fuente:

presentModalViewController:

MainViewController *mainViewController=[[MainViewController alloc]init];
[self.navigationController presentModalViewController:mainViewController animated:YES];

dismissModalViewController:

[self dismissModalViewControllerAnimated:YES];

Swift

self.dismissViewControllerAnimated(true, completion: nil)

La forma más fácil de hacerlo es usando Storyboard y una transición suave.

Hay que crear una transición suave desde el FirstViewController (no el regulador de la navegación) de su tabBarController a un LoginViewController con la interfaz de usuario de inicio de sesión y el nombre de "showLogin".

Crear un método que devuelve un BOOL para validar si el usuario ha iniciado sesión y / o de su / su sesión es válida ... preferentemente en el AppDelegate. Llámalo isSessionValid.

En su FirstViewController.m reemplazar el método viewDidAppear de la siguiente manera:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    if([self isSessionValid]==NO){
        [self performSegueWithIdentifier:@"showLogin" sender:self];
    }
}

A continuación, si el usuario ha iniciado sesión con éxito, simplemente despedir o pop-out del LoginViewController para mostrar las pestañas.

Funciona 100%!

Espero que ayude!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top