gpt4 book ai didi

swift - 缓存和恢复 TabBarItem 顺序

转载 作者:行者123 更新时间:2023-11-30 10:48:19 26 4
gpt4 key购买 nike

在用户修改原始排序后,是否有一种简单的方法可以对 UITabBarController 执行此操作?我得到了以下代码,但感觉有点笨拙。

class TabBarViewController: UITabBarController {

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
self.restoreItemOrder()
}

override func tabBar(_ tabBar: UITabBar, didEndCustomizing items: [UITabBarItem], changed: Bool) {

if changed {
self.cacheItemOrder(items: items)
}
}
}

编辑后缓存/恢复订单的扩展。

extension UITabBarController {

private static let cacheKey = "tabBarIndex"

public func cacheItemOrder(items: [UITabBarItem]) {
var index = [String: Int]()
var i = 0

for item in items {
if let title = item.title {
index[title] = i
}

i += 1
}

UserDefaults.standard.set(index, forKey: UITabBarController.cacheKey)
}

public func restoreItemOrder() {
if let dict = UserDefaults.standard.dictionary(forKey: UITabBarController.cacheKey) as? [String: Int] {

if let vcs = self.viewControllers {

self.viewControllers = vcs.sorted() {
var idx0 = 99
var idx1 = 99

if let t0 = $0.tabBarItem.title, let idx = dict[t0] {
idx0 = idx
}
if let t1 = $1.tabBarItem.title, let idx = dict[t1] {
idx1 = idx
}

return idx0 < idx1
}
}
}
}
}

提前致谢。

最佳答案

您可以使用函数式习语更简洁地表达一切:

extension UITabBarController {

private static let cacheKey = "tabBarIndex"

public func cacheItemOrder(items: [UITabBarItem]) {
UserDefaults.standard.set(
[String: Int](uniqueKeysWithValues: items.enumerated().map { ($1.title ?? "", $0)}),
forKey: UITabBarController.cacheKey
)
}

public func restoreItemOrder() {
guard let order = UserDefaults.standard.dictionary(forKey: UITabBarController.cacheKey) as? [String: Int] else {
return
}
viewControllers?.sort { left, right in
guard let leftIndex = left.title.flatMap({order[$0]}),
let rightIndex = right.title.flatMap({order[$0]}) else {
return false
}
return leftIndex < rightIndex
}
}
}

关于swift - 缓存和恢复 TabBarItem 顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55306717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com