How to: Save order of tabs when customizing tabs in UITabBarController

后端 未结 8 1234
终归单人心
终归单人心 2020-11-29 21:02

I am having problems finding any other information than the docs for how to save the tab order for my UITabBarController, so that the user\'s customization is saved for next

8条回答
  •  误落风尘
    2020-11-29 21:23

    This is what did the trick for me, building on the answers from Rickard & Jesper. All of the code goes into the main TabBarController.

    import UIKit
    
    class TabBarController: UITabBarController, UITabBarControllerDelegate {
    
    let tabOrderKey = "customTabBarOrder"
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        self.delegate = self
        loadCustomTabOrder()
    }
    
    func loadCustomTabOrder() {
    
        let defaults = NSUserDefaults.standardUserDefaults()
        let standardOrderChanged = defaults.boolForKey(tabOrderKey)
    
        if standardOrderChanged {
            print("Standard Order has changed")
    
            var VCArray = [UIViewController]()
            var tagNumber = 0
    
            let tabBar = self as UITabBarController
    
            if let countVC = tabBar.viewControllers?.count {
                print("\(countVC) VCs in total")
                for var x = 0; x < countVC; x++ {
                    tagNumber = defaults.integerForKey("tabPosition\(x)")
    
                    for VC in tabBar.viewControllers! {
                        if tagNumber == VC.tabBarItem.tag {
                            VCArray.append(VC)
                            print("Position \(x): \(VCArray[x].tabBarItem.title!) VC (tag \(tagNumber))")
                        }
                    }
                }
            }
            tabBar.viewControllers = VCArray
        }
    
    }
    
    func tabBarController(tabBarController: UITabBarController, didEndCustomizingViewControllers viewControllers: [UIViewController], changed: Bool) {
    
        print("Change func called")
    
        if changed {
            print("Order has changed")
            let defaults = NSUserDefaults.standardUserDefaults()
    
            for var x = 0; x < viewControllers.count; x++ {
                defaults.setInteger(viewControllers[x].tabBarItem.tag, forKey: "tabPosition\(x)")
                print("\(viewControllers[x].tabBarItem.title!) VC (with tag: \(viewControllers[x].tabBarItem.tag)) is now in position \(x)")
            }
            defaults.setBool(true, forKey: tabOrderKey)
        } else {
            print("Nothing has changed")
        }
    }
    
    }
    

提交回复
热议问题