我正在尝试启用 UISegmentedController
索引根据 UserDefaults
.但我的问题是,如果函数返回 true,我不知道如何启用索引。
我有一个主视图 Controller ,它有 segmentedController
.
假设我有 4 个索引。 0 启用,1、2、3、4 禁用。现在如果分数是 >= value
,我想启用索引 1。
我知道我可以像这样启用和禁用 segmentAt:segmentedControl.setEnabled(true, forSegmentAt: 1) // can also be false
但如何将其实现到函数中。
这就是我想要做的:
class func checkIfEligibleForNextDifficulty(key: String, score: Int) -> Bool{
let userDefaults = UserDefaults.standard
if userDefaults.integer(forKey: key) >= score{
return true
}
return false
}
我是这样使用它的:
if Util.checkIfEligibleForNextDifficulty(key: "diff2", score: 8){
//Here I want to enable the index 1
}
这种事情的最佳方法是什么?我应该声明一些全局变量吗?
最佳答案
您可以为级别
之类的概念建模,并且可以根据分数
创建级别。因此,当您使用分数初始化 Level
时,您将自动推断级别。
然后,假设级别将是一个 int 枚举,将帮助您将其与分段控件的索引相匹配。
要根据分数启用级别,您可以创建如下函数。
enum Level: Int {
case beginner
case medium
case advanced
case expert
}
//MARK: Score & Enabling levels
extension Level {
init(score: Int) {
switch score {
case 1..<8: self = .beginner
case 8..<20: self = .medium
case 20..<100: self = .advanced
case 100..<Int.max: self = .expert
default: self = .beginner
}
}
func enabledLevels() -> [Level] {
switch self {
case .beginner: return [.beginner]
case .medium: return [.beginner, .medium]
case .advanced: return [.beginner, .medium, .advanced]
case .expert: return [.beginner, .medium, .advanced, .expert]
}
}
}
作为练习,尝试调整我的解决方案以添加 UserDefaults,这并不困难。
希望对您有所帮助,解决您的问题。 :)
关于ios - 根据用户默认值启用分段 Controller 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42596903/