[英]How to save the state of UISegmentedControl in Swift3 with userDefaults
我有一个名为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)
开关支架后,但不幸的是它没有工作......
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
}
}
}
您需要重置分段控件。
index = UserDefaults.standard.integer(forKey: "SegmentIndex")
segmented.selectedSegmentIndex = index
我会把它放在你的viewWillAppear方法或类似的东西里面。 只需确保它是在初始化分段控件之后。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.