有没有办法跟踪UISegmentedControl的索引选择?

时间:2016-02-10 06:24:11

标签: ios swift uisegmentedcontrol

我有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

3 个答案:

答案 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)

有效的方法是保留一个包含最后一个选定索引的变量,然后在需要时检查它的值。

  1. 只需要两个变量一个是currentIndex,另一个是prevIndex。

  2. In&#34; Value Changed&#34; UISegmentedControl的方法,只需将currentIndex的值放在currentIndex中的prevIndex和selectedSegmentIndex中。

答案 2 :(得分:0)

为什么不在selectedNumber上使用switch语句?

switch chosenNumber {
case 0: item1.hidden = false
// etc   
default: break 
}