Как перезагрузить представление при использовании ignoreViewControllerAnimated
-
21-12-2019 - |
Вопрос
Я надеюсь, что кто-нибудь сможет указать мне правильное направление.
У меня есть два контроллера: MasterViewController (который отображает много данных) и LoginViewController (регистрирует пользователей и получает эти данные).
MasterViewController является корневым контроллером.У меня есть этот код прямо вверху, чтобы проверить, вошел ли пользователь в систему.Если они вошли в систему, вызывается метод loadView, в противном случае они передаются в контроллер представления входа.
- (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];
}
}
Как только они войдут в систему, у меня есть код, который возвращает их в MasterViewController с помощью этого кода:
[self dismissViewControllerAnimated:NO completion:nil];
Проблема в том, что MasterViewController вообще не загружен.Как мне перечитать все это представление, прежде чем пользователь вернется к нему?
Спасибо, Питер
Решение
Есть разные способы.
Используйте делегат и объявите метод перезагрузки в главном контроллере представления, например «reloadData».Прежде чем представить контроллер представления входа в систему, установите главный контроллер представления в качестве делегата для loginSuccessEvent.После успешного входа в систему перед его отклонением вызовите метод делегата.
Установите свойство bool,
isReloadNeeded
в делегате приложения.В главном контроллере представленияviewWillAppear
илиviewWillAppear
проверьте это логическое значение, чтобы перезагрузить данные.установите для bool значение «да» из контроллера представления входа в систему и сбросьте его после перезагрузки в главном контроллере представления.
Чтобы сделать вариант 1:
Определить протокол взаимодействия
@protocol LoginDelegate
-(void) loginSuccessPostProcess;
@end
В контроллере представления входа в систему.
Файл .h -> Объявить свойство
@property (weak) id< LoginDelegate> loginDelegate;
.m --> После успешного входа в систему перед увольнением вызовите метод делегата
//Login Success
[self. loginDelegate loginSuccessPostProcess];
[self dismissViewControllerAnimated:YES completion:nil];
Главное представление Контроллер -> Реализовать метод.
.h --> Принять протокол
@interface mainViewCOntroller < LoginDelegate>
.м
Установите контроллер основного представления в качестве делегата свойства делегата в контроллере представления входа в систему после создания экземпляра и перед его представлением.
loginViewController *login = [[LoginViewController alloc] init];// Установить свой делегат после экземпляра и перед представлением login.logindelegate = self;[самостоятельное представлениеViewController: вход];
Реализовать метод перезагрузки
-(void) loginSuccessPostProcess
{
//Your Method.
}