我有一个带有一些数字的 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
最佳答案
如果您使用 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) 当 View 加载时(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)
关于ios - 有没有办法跟踪 UISegmentedControl 的索引选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35308251/