Как заставить приложение открываться в корневой раскадровке? - PullRequest
3 голосов
/ 23 февраля 2012

Как бы я заставлял приложение запускаться на экране входа в систему (rootViewController) при каждом запуске приложения? В настоящее время он открывается на том контроллере представления, на котором я его оставил, что, как мне кажется, должно произойти.

P.S. извините, новинка в stackoverflow и разработке под iOS

Ответы [ 4 ]

4 голосов
/ 13 марта 2013

Поскольку вы используете раскадровки, вы можете использовать сегменты раскручивания:

  1. Создайте метод раскрутки IBAction в вашем корневом контроллере представления следующим образом:

    - (IBAction)unwindToLogin:(UIStoryboardSegue *)segue
    {
        // Do something after unwinding
    }
    

    Помнитеобъявить метод в заголовочном файле класса контроллера корневого представления, чтобы IB мог его найти.

    - (IBAction)unwindToLogin:(UIStoryboardSegue *)segue;
    
  2. Для всех сцен раскадровки, связанных с помощью переходов (прямо или косвенно) с корнемЧтобы просмотреть сцену контроллера, выполните следующие действия:

    • Используйте схему документа раскадровки, чтобы подключить контроллер представления к переходу «Выход», удерживая нажатой клавишу Ctrl, нажимая на контроллер представления и перетаскиваяи падающий на зеленый "Выход" местозаполнитель segue.При появлении запроса выберите селектор «unwindToLogin:».

      Connecting unwind segue

    • Установите идентификатор последовательности ручной перемотки (только что созданной):

      Select the new unwind segue

      Set identifier of unwind segue

    • В контроллере представления для этой сцены прослушайте уведомление «приложение стало активным» (которое будет публиковаться всякий раз, когда приложениевыходит на передний план) примерно так:

      - (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

1 голос
/ 08 сентября 2014

Simple In AppDelegate's applicationDidBecomeActive просто напишите

UINavigationController *nav = (UINavigationController *)self.window.rootViewController;
[nav popToRootViewControllerAnimated:YES];
0 голосов
/ 24 февраля 2012

В настоящее время он открывается с любого контроллера вида, который я оставил на

Кажется, вы хотите видеть свой контроллер после минимизации и восстановления приложения, а не после первой загрузки.Я правильно понял?
В этом случае поведение, которое вы описали, нормальное.

0 голосов
/ 23 февраля 2012

Убедитесь, что выбран контроллер вида в раскадровке и выберите «Первоначальный контроллер вида»:

enter image description here

...