【问题标题】:How to save the state of UISegmentedControl in Swift3 with userDefaults如何使用 userDefaults 在 Swift3 中保存 UISegmentedControl 的状态
【发布时间】:2017-07-22 15:49:29
【问题描述】:

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

@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)

切换括号后,可惜没用……

【问题讨论】:

    标签: ios swift3 nsuserdefaults xcode8 uisegmentedcontrol


    【解决方案1】:

    您需要重置分段控件。

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

    我会将其放入您的 viewWillAppear 方法或类似方法中。只需确保它是在初始化分段控件之后。

    【讨论】:

    • 在哪里可以添加此代码?我在@IBAction 中尝试过,但 segmentedControl 变得不可切换。
    • 我会把它添加到viewDidAppear
    【解决方案2】:
    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
            }
    
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2016-03-25
    • 1970-01-01
    相关资源
    最近更新 更多