试图保存SegmentController的位置

时间:2017-02-06 17:29:31

标签: swift xcode uisegmentedcontrol

我点击一个分段控制器,然后一次更改6个标签,使用不同的值(公制为英制)。

我有那个工作,但是当我换到另一个页面并返回时,选择器重置到位置0.有没有办法保存我离开控制器并回来时选择的位置。我说控制器,但它只有一个控制器,有许多nib文件,像一本书一样运行,所以当我翻页并返回时,它回到原来的位置。

我试过这个代码,可能会看到确实出现但没有运气。

if measurementSwitch == 0 {
    metricImperialSwitch?.selectedSegmentIndex = 0
         print(measurementSwitch)
    }else {
        metricImperialSwitch?.selectedSegmentIndex = 1
        print(measurementSwitch)
    }

这是功能。

func P18Switch() {

        if metricImperialSwitch.selectedSegmentIndex == 0
        {
            measurementSwitch = 0
            CWLabel.text = "kg"; TWLabel.text = "kg"; CWaLabel.text = "cm"; TWaLabel.text = "cm"; CHLabel.text = "cm"; THLabel.text = "cm"
        }
        else if metricImperialSwitch.selectedSegmentIndex == 1
        {
            measurementSwitch = 1
            CWLabel.text = "st"; TWLabel.text = "st"; CWaLabel.text = "inch"; TWaLabel.text = "inch"; CHLabel.text = "inch"; THLabel.text = "inch"

        }
}

然后调用视图中的函数加载。

1 个答案:

答案 0 :(得分:0)

您可以使用UserDefaults保存选定的细分索引:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    UserDefaults.standard.set(metricImperialSwitch?.selectedSegmentIndex, "selectedIndex")
}



override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    if UserDefaults.standard.value(forKey: "selectedIndex") != nil{
         measurementSwitch = UserDefaults.standard.value(forKey: "selectedIndex") as! Int
    }else{
         measurementSwitch = 0
    }
    if measurementSwitch == 0 {
         metricImperialSwitch?.selectedSegmentIndex = 0
    }
    else {
        metricImperialSwitch?.selectedSegmentIndex = 1
    }
    self.P18Switch()
}

UserDefaults的替代方案是使用 Global Variables 。这两种方法都运行得很好,但最好使用UserDefaults,因为即使应用程序完全关闭,值也会保存。