Подкласс вашего TabBarController, используя следующий код
import UIKit
class MyTabBarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
restoreOrder()
}
override func tabBar(_ tabBar: UITabBar, didEndCustomizing items: [UITabBarItem], changed: Bool) {
let order = getCurrentOrder()
saveOrder(order: order)
}
private func getCurrentOrder() -> [Int] {
var order: [Int] = []
if let controllers = self.viewControllers {
for controller in controllers {
order.append(controller.tabBarItem.tag)
}
}
return order
}
private func saveOrder(order: [Int]) {
UserDefaults.standard.set(order, forKey: "TabBarItemsOrder")
}
private func restoreOrder() {
guard let order = UserDefaults.standard.value(forKey: "TabBarItemsOrder") as? [Int] else { return }
var reorderedControllers: [UIViewController] = []
if let controllers = self.viewControllers {
for tag in order {
for controller in controllers {
if controller.tabBarItem.tag == tag {
reorderedControllers.append(controller)
}
}
}
}
self.setViewControllers(reorderedControllers, animated: false)
}
}
Установите тег для каждого элемента панели вкладок viewController, управляемого вашим контроллером панели вкладок.