Поскольку вы используете раскадровки, вы можете использовать сегменты раскручивания:
Создайте метод раскрутки IBAction в вашем корневом контроллере представления следующим образом:
- (IBAction)unwindToLogin:(UIStoryboardSegue *)segue
{
// Do something after unwinding
}
Помнитеобъявить метод в заголовочном файле класса контроллера корневого представления, чтобы IB мог его найти.
- (IBAction)unwindToLogin:(UIStoryboardSegue *)segue;
Для всех сцен раскадровки, связанных с помощью переходов (прямо или косвенно) с корнемЧтобы просмотреть сцену контроллера, выполните следующие действия:
Используйте схему документа раскадровки, чтобы подключить контроллер представления к переходу «Выход», удерживая нажатой клавишу Ctrl, нажимая на контроллер представления и перетаскиваяи падающий на зеленый "Выход" местозаполнитель segue.При появлении запроса выберите селектор «unwindToLogin:».
Установите идентификатор последовательности ручной перемотки (только что созданной):
В контроллере представления для этой сцены прослушайте уведомление «приложение стало активным» (которое будет публиковаться всякий раз, когда приложениевыходит на передний план) примерно так:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// Do other viewWillAppear stuff...
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidBecomeActive)
name:UIApplicationDidBecomeActiveNotification object:nil];
}
Когда уведомление получено, выполните процедуру раскрутки (эффективно снова отображая экран входа в систему для пользователя):
- (void)applicationDidBecomeActive
{
//Perform unwind segue
[self performSegueWithIdentifier:@"unwind" sender:self];
}
Не забудьте удалитьнаблюдение, когда мы больше не представляем контроллер представления:
- (void)viewWillDisappear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIApplicationDidBecomeActiveNotification
object:nil];
// Do other viewWillDisappear stuff...
[super viewWillDisappear:animated];
}
Вот и все.Теперь всякий раз, когда пользователь открывает приложение, текущий представляющий контроллер представления будет отклонен, и корневой контроллер представления (который в данном случае является контроллером представления входа в систему) будет представлен снова.
Если вы не хотитеОтмотав все переходы обратно к корневому контроллеру представления (эффективно выводя пользователя из системы), вы можете сохранить текущее состояние, представив модальный контроллер представления входа в систему поверх текущего в настоящее время контроллера, когда уведомление получено.Для этого замените метод applicationDidBecomeActive
на:
- (void)applicationDidBecomeActive
{
// Where "LoginViewController" is your UIViewController that manages your user login.
LoginViewController *loginViewController = [[LoginViewController alloc] init];
[self presentViewController:loginViewController animated:YES completion:nil];
}
Обратите внимание, что в приведенном выше решении предполагается использование ARC и iOS6.x