我有UISegementedControl
一些数字。当用户点击某个数字时,会弹出许多UITextFields
。
我运行了一个switch语句和每个数字的大小写,但我想清理代码,删除switch语句,并创建一个循环来检查分段控件中选择的数字,循环遍历一个文本数组字段并使许多文本字段弹出。
当用户选择一个数字并继续选择更高的数字时,它可以正常工作。
但是,如果用户选择的数字低于上一个选择,则不会执行任何操作(不会隐藏不需要的文本字段)。
有没有办法跟踪分段控件中的选择,以便我可以制作一些逻辑语句来检查选择的新数字是否为>或者<比以前低吗?
var chosenNumber = segmentedControl.selectedSegmentIndex
var textArray : UITextField = [item1,item2,item3,item4,item5,item6,item7,item8]
for text in textArray[0...chosenNumber] {
text.hidden = false
}
//logic here to check if newNumber is < than chosenNumber
for text in textArray[newNumber..<8] {
text.hidden = true
答案 0 :(得分:2)
如果您使用KVO,您可以观察旧的和新的价值变化......
例如:
@IBOutlet weak var segmentedControl: UISegmentedControl!
var kvoContextSegmentedControl: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
self.segmentedControl.addObserver(self, forKeyPath: "selectedSegmentIndex", options: [.Initial, .Old, .New], context: &kvoContextSegmentedControl)
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if ((keyPath == "selectedSegmentIndex") && context == &kvoContextSegmentedControl) {
let oldValue = change![NSKeyValueChangeOldKey]
let newValue = change![NSKeyValueChangeNewKey]
debugPrint("OldValue: \(oldValue)")
debugPrint("NewValue: \(newValue)")
}else{
super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
}
}
输出以下内容:
1)当视图加载时(0是默认选定的段):
OldValue: nil
NewValue: Optional(0)
2)点击不同的细分时:
i)点击3(当0是最后一个)时:
OldValue: Optional(0)
NewValue: Optional(3)
ii)点击2(当3是最后一个)时:
OldValue: Optional(3)
NewValue: Optional(2)
答案 1 :(得分:0)
有效的方法是保留一个包含最后一个选定索引的变量,然后在需要时检查它的值。
只需要两个变量一个是currentIndex,另一个是prevIndex。
In&#34; Value Changed&#34; UISegmentedControl的方法,只需将currentIndex的值放在currentIndex中的prevIndex和selectedSegmentIndex中。
答案 2 :(得分:0)
为什么不在selectedNumber上使用switch语句?
switch chosenNumber {
case 0: item1.hidden = false
// etc
default: break
}