Como recarregar uma visualização ao usar DispensaViewControllerAnimated
-
21-12-2019 - |
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
Solução
Existem diferentes maneiras.
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.
Defina uma propriedade bool,
isReloadNeeded
no delegado do aplicativo.No controlador de visualização mestre,viewWillAppear
ouviewWillAppear
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
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.
}