如何使用userDefaults在Swift3中保存UISegmentedControl的状态

时间:2017-03-02 18:50:42

标签: ios swift3 nsuserdefaults xcode8 uisegmentedcontrol

我有一个名为langSeg的UISegmentedControl,其中两个索引标记为[English&德语],使用以下代码控制我的应用程序中的标签语言:

@IBAction func indexChanged(sender: UISegmentedControl) {

    switch langSeg.selectedSegmentIndex
    {
    case 0:

        let language = "en"
        let path = Bundle.main.path(forResource: language, ofType: "lproj")
        let bundle = Bundle(path: path!)
        headerLbl.text = bundle?.localizedString(forKey: "HLbl", value: nil, table: nil)
        UserDefaults.standard.set(["en"], forKey: "AppleLanguages")

    case 1:

        let language = "de"
        let path = Bundle.main.path(forResource: language, ofType: "lproj")
        let bundle = Bundle(path: path!)
        descLbl.text = bundle?.localizedString(forKey: "DLbl", value: nil, table: nil)
        UserDefaults.standard.set(["de"], forKey: "AppleLanguages")

    default:
        break;
    }
}

在英语和德语之间切换并保存用户的选择;此代码工作正常,但是当我将语言更改为德语后重新启动我的应用程序时,标签标题以德语保存,但segmentedControl状态更改回英文标题[索引0]。 我需要帮助来保存用户对UISegmentedControl的选择,我们非常感谢任何帮助。 我试过这段代码:

langSeg.selectedSegmentIndex = sender.selectedSegmentIndex
UserDefaults.standard.integer(forKey: "SegmentIndex")

@IBAction func indexChanged(sender: UISegmentedControl)

在开关支架之后,但不幸的是它没有工作......

2 个答案:

答案 0 :(得分:2)

{{1}}

答案 1 :(得分:1)

您需要重置分段控件。

index = UserDefaults.standard.integer(forKey: "SegmentIndex")
segmented.selectedSegmentIndex = index

我会把它放在你的viewWillAppear方法或类似的东西里面。只需确保它是在初始化分段控件之后。