Как перезагрузить представление при использовании ignoreViewControllerAnimated

StackOverflow https://stackoverflow.com//questions/24018768

Вопрос

Я надеюсь, что кто-нибудь сможет указать мне правильное направление.

У меня есть два контроллера: 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 вообще не загружен.Как мне перечитать все это представление, прежде чем пользователь вернется к нему?

Спасибо, Питер

Это было полезно?

Решение

Есть разные способы.

  1. Используйте делегат и объявите метод перезагрузки в главном контроллере представления, например «reloadData».Прежде чем представить контроллер представления входа в систему, установите главный контроллер представления в качестве делегата для loginSuccessEvent.После успешного входа в систему перед его отклонением вызовите метод делегата.

  2. Установите свойство 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>

  1. Установите контроллер основного представления в качестве делегата свойства делегата в контроллере представления входа в систему после создания экземпляра и перед его представлением.

    loginViewController *login = [[LoginViewController alloc] init];// Установить свой делегат после экземпляра и перед представлением login.logindelegate = self;[самостоятельное представлениеViewController: вход];

Реализовать метод перезагрузки

 -(void) loginSuccessPostProcess
 {
        //Your Method.
  }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top