Как мне запустить приложение для iPhone со специфическим отображением экрана? - PullRequest
4 голосов
/ 25 октября 2009

У меня есть большое приложение с множеством экранов, все расположены в иерархии, с UITabBarController вверху, UINavigationController ниже этого, а затем UIView Controllers ниже тех, возможно, с модальным контроллером, где-то добавленным для хорошей меры.

Пользователь может выбрать стартовый экран из списка. После выбора приложение будет запущено в следующий раз с указанного экрана, и вся навигация будет работать так, как если бы они сами перемещались туда.

Поскольку я не могу создать подклассы UITabBarController и UINavigationController, я не могу добавить ивары для установки какой-либо исходной навигационной информации.

Так каков наилучший способ настроить иерархию и показать экран правильного контроллера представления в этих условиях и сделать это быстро?

Ответы [ 5 ]

1 голос
/ 25 октября 2009

Вы захотите проверить NSCoder и сохранить иерархию представления перед выходом. Таким образом, чтобы загрузить их, вы просто десериализуете иерархию представления, и состояние должно быть таким же.

0 голосов
/ 26 апреля 2011

Вот как я это сделал. Оба метода находятся в appDelegate, а tabBarController является переменной экземпляра.

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    /*
     Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
     If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
     */

    //Remember the users last tab selection
    NSInteger tabIndex = self.tabBarController.selectedIndex;
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setInteger: tabIndex forKey:@"activeTab"];

    if (![userDefaults synchronize]) 
    {
        NSLog(@"Error Synchronizing NSUserDefaults");
    }

}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    /*
     Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
     */

    //Set the tabBarController to the last visted tab
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    int activeTab = [(NSNumber*)[userDefaults objectForKey:@"activeTab"] intValue];
    self.tabBarController.selectedIndex = activeTab;
}
0 голосов
/ 25 октября 2009

Я не уверен, в чем проблема, которую вы описываете. То есть почему бы просто не

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

  • Повторно создайте иерархию представления, как если бы пользователь перемещался в вашем appDidFinishLaunching

...

Так, например, вы можете сохранить имена классов контроллеров, когда они помещаются в стек, а затем, когда приложение перезагружается, создавать отдельные классы контроллеров и помещать их в стек навигации. Для контроллеров вкладок вам нужно сохранить индекс того, какая вкладка была выбрана в то время.

Если ваша проблема / вопрос более сложный, чем этот, возможно, отредактируйте его, чтобы объяснить конкретную часть, в которой вы застряли.

0 голосов
/ 25 октября 2009

Я делаю это, сохраняя кучу разных значений в качестве пользовательских настроек по умолчанию. Тем не менее, мой метод applicationDidFinishLaunching немного запутан, так как я использую кучу условных операторов, чтобы поместить View Controllers в стек, решить, какие вкладки выбраны, решить, будет ли отображаться модальное представление и т. Д.

0 голосов
/ 25 октября 2009

Сохраните индекс вкладки, которую пользователь хочет загружать каждый раз, а затем, когда приложение запускается, задайте для свойства UITabBarController.selectedIndex этот индекс, а затем вам нужно будет вызвать viewDidAppear для UITabBarController.selectedViewController. Это должно привести к тому, что указатель станет видимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...