Вопрос по uitabbar, sdk, iphone, tabs – Как запомнить последнюю выбранную вкладку в UITabBarController?

11

я пытаюсь заставить мое приложение запоминать, какая вкладка последний раз просматривалась до его закрытия, чтобы приложение открывалось до той же вкладки при следующем запуске. Это функциональность iPhoneФункция телефона s: как я могу это сделать?

Взгляните и на этот недавний вопрос:stackoverflow.com/questions/1619478/... Sixten Otto

Ваш Ответ

6   ответов
0

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

2

Я вложил в подкласс TabBarController и:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.selectedIndex = [[NSUserDefaults standardUserDefaults] integerForKey:@"activeTab"];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    [[NSUserDefaults standardUserDefaults] setInteger: self.selectedIndex
             forKey:@"activeTab"];
}
5

ОБНОВИТЬ

Цель С

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
NSLog(@"%lu",self.tabBarController.selectedIndex);
return YES;
}

In this delegate method you will get last selected index.

Swift 3.2

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool
{
    print("%i",tabBarController.selectedIndex)
    return true
}
Это неUITabBarDelegate, его .UITabBarControllerDelegate MoLice
Я отредактировал свой ответ. Nimisha Ranipa
8

еs делегат, перезаписать

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item

и хранитьвещь'Индекс s в NSUserDefaults. В следующий раз, когда ваше приложение запустится, прочитайте его оттуда и верните в исходное состояние. Что-то вроде этого:

Во-первых, вы должны установить делегата для вашего UITabBar, например так:

tabBarController.delegate = anObject;

-вобъектперезаписатьdidSelectItem:

       - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
        {
          NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

          [def setInteger: [NSNumber numberWithInt: tabBarController.selectedIndex]
 forKey:@"activeTab"];

          [def synchronize];
        }

Обратите внимание, что вы сохраняете NSNumber, какИНТ значения не могут быть сериализованы напрямую. Когда вы снова запустите приложение, оно прочитает и установитSelectedIndex значение из значений по умолчанию:

- (void)applicationDidFinishLaunchingUIApplication *)application {  
   NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

   int activeTab = [(NSNumber*)[def objectForKey:@"activeTab"] intValue];

   tabBarController.selectedIndex = activeTab;
} 
@luvieere I 'Извините, но не могли бы вы уточнить, пожалуйста, немного больше примеров кода? quantum
@luvieere Ooops, вы устанавливаете NSNumber вместо Int Shmidt
Конечно, я только что сделал это. luvieere
@luvieere почему бы просто не сохранитьtabBarController.selectedIndex в-[UIApplicationDelegate applicationWillTerminate:]? Победил'Т всегда вызывается до того, как приложение завершится? ma11hew28
1

аRememberingTabBarController в раскадровке

import Foundation
import UIKit

class RememberingTabBarController: UITabBarController, UITabBarControllerDelegate {
    let selectedTabIndexKey = "selectedTabIndex"

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self

        // Load the last selected tab if the key exists in the UserDefaults
        if UserDefaul,ts.standard.object(forKey: self.selectedTabIndexKey) != nil {
            self.selectedIndex = UserDefaults.standard.integer(forKey: self.selectedTabIndexKey)
        }
    }

    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
        // Save the selected index to the UserDefaults
        UserDefaults.standard.set(self.selectedIndex, forKey: self.selectedTabIndexKey)
        UserDefaults.standard.synchronize()
    }
}
1

Как я это сделал. Оба метода находятся в 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;
}
этот код не работает для меня Anilkumar iOS developer

Похожие вопросы