Pregunta

Espero que alguien pueda indicarme la dirección correcta.

Tengo 2 controladores, MasterViewController (que muestra una gran cantidad de datos) y LoginViewController (inicia sesión en los usuarios y obtiene esos datos).

MasterViewController es el controlador raíz.Tengo este código justo en la parte superior para verificar si el usuario ha iniciado sesión.Si han iniciado sesión, se llama al método loadView; de lo contrario, se llevan al controlador de vista de inicio de sesión.

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSDictionary *session = [Global getSession];
    if(!session){

        // Not logged in.
        LoginViewController *loginViewController = [LoginViewController alloc];
        [self.navigationController presentViewController:loginViewController animated:YES completion:nil];

    }else{
        [self loadView];
    }
}

Una vez que inician sesión, tengo este código que los lleva de regreso al MasterViewController con este código:

[self dismissViewControllerAnimated:NO completion:nil];

El problema es que MasterViewController no está cargado en absoluto.¿Cómo relaciono toda esa vista antes de que el usuario regrese a la vista?

Gracias Peter

¿Fue útil?

Solución

Hay diferentes maneras.

  1. Utilice delegado y declare un método para recargar en el controlador de vista maestro, diga 'reloadData'.Antes de presentar el controlador de vista de inicio de sesión, configure el controlador de vista maestro como delegado para loginSuccessEvent.Una vez que el inicio de sesión sea exitoso antes de descartarlo, llame al método delegado.

  2. Establecer una propiedad booleana, isReloadNeeded en el delegado de la aplicación.En el controlador de vista maestra, viewWillAppear o viewWillAppear marque este bool para recargar datos.establezca bool en sí desde el controlador de vista de inicio de sesión y reinícielo después de recargar en el controlador de vista maestro.

Para hacer la opción 1:

Definir un protocolo de interacción.

@protocol LoginDelegate

   -(void) loginSuccessPostProcess;

@end

En Iniciar sesión Ver controlador.

Archivo .h --> Declarar una propiedad

@property (weak) id< LoginDelegate> loginDelegate;

.m --> Después de iniciar sesión correctamente antes de cerrar, llame al método delegado

//Login Success
[self. loginDelegate loginSuccessPostProcess];
[self dismissViewControllerAnimated:YES completion:nil];

Controlador de vista principal -->Implementar el método.

.h --> Adoptar al protocolo

  @interface mainViewCOntroller < LoginDelegate>

.metro

  1. Establezca el Controlador de vista principal como delegado de la propiedad de delegado en Login View Contoller después de la creación de instancias y antes de presentarlo.

    loginViewController *login = [[LoginViewController alloc] init];// Establezca su delegado después de la instancia y antes de presentar login.logindelegate = self;[auto presenteViewController: iniciar sesión];

Implementar el método de recarga.

 -(void) loginSuccessPostProcess
 {
        //Your Method.
  }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top