gpt4 book ai didi

ios - Swift 1.2 - 根据 NSUserDefaults 值更新 UIPickerView 初始行

转载 作者:行者123 更新时间:2023-11-30 14:03:41 24 4
gpt4 key购买 nike

编辑:需要明确的是,这不是重复的。 我的问题不是保存/检索数据,而是显示正确的 UIPickerView 行,在 Swift 1.2 中不再需要同步(正如堆栈溢出上的许多答案中所解释的那样)

在我的应用程序中,我使用 pickerViewv 来设置地理定位数据应显示的半径。我将该半径值保存在 NSUserDefaults 中。在我看来,我成功保存了这样的设置(由 printl 检查),但我想更新 UIPicker,以便用户了解当前设置。此时选择器默认总是显示 5(即使 key 的值是另一个)。

编辑2:这解决了我的问题,感谢答案。在 viewWillAppear 中

switch kRadiusMessages {
case 5.0:
self.pickerView.selectRow(0, inComponent: 0, animated: true)
case 10.0:
self.pickerView.selectRow(1, inComponent: 0, animated: true)
case 15.0:
self.pickerView.selectRow(2, inComponent: 0, animated: true)
case 20.0:
self.pickerView.selectRow(3, inComponent: 0, animated: true)
default:
self.pickerView.selectRow(0, inComponent: 0, animated: true)
}

这是最初的起始代码:

   import UIKit

class SingleSettingsTVC: UITableViewController, UIPickerViewDelegate, UIPickerViewDataSource {


var pickerDataSource = ["5 km", "10 km", "15 km", "20 km"]

let defaults = NSUserDefaults.standardUserDefaults()
var kRadiusMessages : Double!


override func viewDidLoad() {
super.viewDidLoad()

self.pickerView.dataSource = self
self.pickerView.delegate = self

kRadiusMessages = defaults.doubleForKey("radiusForMessages")
println("SingleSettingsTVC kRadiusMessages is \(kRadiusMessages)")


}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}


@IBOutlet weak var pickerView: UIPickerView!


func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return pickerDataSource.count
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return pickerDataSource[row]
}




func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
{
if(row == 0)
{
self.view.backgroundColor = UIColor.whiteColor()
defaults.setDouble(5.0, forKey: "radiusForMessages")
self.kRadiusMessages = defaults.doubleForKey("radiusForMessages")
println("value for kRadiusMessages is : *\(kRadiusMessages)*")

}
else if(row == 1)
{
self.view.backgroundColor = UIColor.redColor()
defaults.setDouble(10.0, forKey: "radiusForMessages")
self.kRadiusMessages = defaults.doubleForKey("radiusForMessages")
println("value for kRadiusMessages is : *\(kRadiusMessages)*")
}
else if(row == 2)
{
self.view.backgroundColor = UIColor.greenColor()
defaults.setDouble(15.0, forKey: "radiusForMessages")
self.kRadiusMessages = defaults.doubleForKey("radiusForMessages")
println("value for kRadiusMessages is : *\(kRadiusMessages)*")
}
else if(row == 3)
{
self.view.backgroundColor = UIColor.greenColor()
defaults.setDouble(20.0, forKey: "radiusForMessages")
self.kRadiusMessages = defaults.doubleForKey("radiusForMessages")
println("value for kRadiusMessages is : *\(kRadiusMessages)*")
}
else
{
self.view.backgroundColor = UIColor.blueColor()
}
}

}

最佳答案

NSUserDefaults中设置值后,您需要同步它。保存数据后输入以下行,然后尝试检索。

if(row == 0)
{
self.view.backgroundColor = UIColor.whiteColor()
defaults.setDouble(5.0, forKey: "radiusForMessages")
defaults.synchronize()
self.kRadiusMessages = defaults.doubleForKey("radiusForMessages")
println("value for kRadiusMessages is : *\(kRadiusMessages)*")
}

已编辑:您可以使用以下行设置初始行

self.pickerView.selectRow(0, inComponent: 0, animated: true)

希望这有帮助!

关于ios - Swift 1.2 - 根据 NSUserDefaults 值更新 UIPickerView 初始行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32667070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com