Pergunta

Espero que alguém possa me indicar a direção certa.

Eu tenho 2 controladores, MasterViewController (que exibe muitos dados) e LoginViewController (efetua login dos usuários e obtém esses dados).

O MasterViewController é o controlador raiz.Tenho esse código logo no topo para verificar se o usuário está logado.Se eles estiverem logados, o método loadView será chamado, caso contrário, eles serão levados para o controlador de visualização de login.

- (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];
    }
}

Assim que eles fizerem login, tenho este código que os leva de volta ao MasterViewController com este código:

[self dismissViewControllerAnimated:NO completion:nil];

O problema é que o MasterViewController não está carregado.Como relaciono toda a visualização antes que o usuário retorne à visualização?

Obrigado, Peter

Foi útil?

Solução

Existem diferentes maneiras.

  1. Use delegado e declare um método para recarregar no controlador de visualização mestre, digamos 'reloadData'.Antes de apresentar o controlador de visualização de login, defina o controlador de visualização mestre como um delegado para loginSuccessEvent.Assim que o login for bem-sucedido, antes de descartá-lo, chame o método delegado.

  2. Defina uma propriedade bool, isReloadNeeded no delegado do aplicativo.No controlador de visualização mestre, viewWillAppear ou viewWillAppear verifique este bool para recarregar os dados.defina o bool como sim no controlador de visualização de login e redefina após recarregar no controlador de visualização mestre.

Para fazer a opção 1:

Defina um protocolo para interação

@protocol LoginDelegate

   -(void) loginSuccessPostProcess;

@end

No controlador de visualização de login.

.h Arquivo -> Declarar uma propriedade

@property (weak) id< LoginDelegate> loginDelegate;

.m -> Após o sucesso do login antes de descartar, chame o método delegado

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

Visualização principal Controlador -> Implementar o método.

.h -> Adotar para protocolo

  @interface mainViewCOntroller < LoginDelegate>

.m

  1. Defina o controlador da visualização principal como um delegado para a propriedade delegada no Login View Contoller após a instanciação e antes de apresentá-lo

    loginViewController *login = [[alocação de LoginViewController] init];// Defina seu delegado após a instanciação e antes de apresentar login.logindElegate = self;[self presentViewController:login];

Implementar o método para recarregar

 -(void) loginSuccessPostProcess
 {
        //Your Method.
  }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top