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

Ios 如何使用userDefaults在Swift3中保存UISegmentedControl的状态,ios,swift3,nsuserdefaults,xcode8,uisegmentedcontrol,Ios,Swift3,Nsuserdefaults,Xcode8,Uisegmentedcontrol,我有一个名为langSeg的UISegmentedControl,有两个标记为[英语和德语]的索引,它使用以下代码控制我的应用程序中标签的语言: @IBAction func indexChanged(sender: UISegmentedControl) { switch langSeg.selectedSegmentIndex { case 0: let language = "en" let path = Bundle.main.

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

@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;
    }
}
langSeg.selectedSegmentIndex = sender.selectedSegmentIndex
UserDefaults.standard.integer(forKey: "SegmentIndex")
在英语和德语之间切换并保存用户的选择;此代码工作正常,但当我将语言更改为德语(例如)后重新启动应用程序时,标签标题将以德语保存,但segmentedControl状态将更改回英语标题[索引0]。 请,我需要帮助保存用户选择的UISegmentedControl,非常感谢您的帮助。 我尝试了以下代码:

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

langSeg.selectedSegmentIndex = sender.selectedSegmentIndex
UserDefaults.standard.integer(forKey: "SegmentIndex")
@IBAction func indexChanged(sender: UISegmentedControl)

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

您需要重置分段控件

langSeg.selectedSegmentIndex = sender.selectedSegmentIndex
UserDefaults.standard.integer(forKey: "SegmentIndex")
index = UserDefaults.standard.integer(forKey: "SegmentIndex")
segmented.selectedSegmentIndex = index
class ViewController: UIViewController {

    @IBOutlet weak var segmentedControl: UISegmentedControl!

    @IBAction func segmentSelected(_ sender: UISegmentedControl) {

        UserDefaults.standard.set(sender.selectedSegmentIndex, forKey: "chosenLanguage")
    }


    override func viewDidLoad() {
        super.viewDidLoad()

        if let value = UserDefaults.standard.value(forKey: "chosenLanguage"){
            let selectedIndex = value as! Int
            segmentedControl.selectedSegmentIndex = selectedIndex
        }

    }
}

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

您需要重置分段控件

langSeg.selectedSegmentIndex = sender.selectedSegmentIndex
UserDefaults.standard.integer(forKey: "SegmentIndex")
index = UserDefaults.standard.integer(forKey: "SegmentIndex")
segmented.selectedSegmentIndex = index
class ViewController: UIViewController {

    @IBOutlet weak var segmentedControl: UISegmentedControl!

    @IBAction func segmentSelected(_ sender: UISegmentedControl) {

        UserDefaults.standard.set(sender.selectedSegmentIndex, forKey: "chosenLanguage")
    }


    override func viewDidLoad() {
        super.viewDidLoad()

        if let value = UserDefaults.standard.value(forKey: "chosenLanguage"){
            let selectedIndex = value as! Int
            segmentedControl.selectedSegmentIndex = selectedIndex
        }

    }
}

我会把它放在你的viewwillappearch方法或类似的东西里。只需确保在初始化分段控件之后才可以添加此代码。

在哪里可以添加此代码?我在@iAction中尝试了它,但是segmentedControl变得不可切换。我会将它添加到
ViewDidAspect
哪里可以添加此代码?我在@iAction中尝试了它,但是segmentedControl变得不可切换。我会将它添加到
ViewDidAspect
为什么为int?这不是分段控制索引的默认值吗?@DanielSpringer在Api中,
selectedSegmentIndex
的类型是Int。这正是我的问题。为什么要将整数转换为整数?你试过运行这个代码吗?为什么是int?这不是分段控制索引的默认值吗?@DanielSpringer在Api中,
selectedSegmentIndex
的类型是Int。这正是我的问题。为什么要将整数转换为整数?你试过运行这个代码吗?
langSeg.selectedSegmentIndex = sender.selectedSegmentIndex
UserDefaults.standard.integer(forKey: "SegmentIndex")
index = UserDefaults.standard.integer(forKey: "SegmentIndex")
segmented.selectedSegmentIndex = index
class ViewController: UIViewController {

    @IBOutlet weak var segmentedControl: UISegmentedControl!

    @IBAction func segmentSelected(_ sender: UISegmentedControl) {

        UserDefaults.standard.set(sender.selectedSegmentIndex, forKey: "chosenLanguage")
    }


    override func viewDidLoad() {
        super.viewDidLoad()

        if let value = UserDefaults.standard.value(forKey: "chosenLanguage"){
            let selectedIndex = value as! Int
            segmentedControl.selectedSegmentIndex = selectedIndex
        }

    }
}