显示带有选定行的 UIPickerView
Showing UIPickerView with selected row
我想弄清楚如何在我打开 UIPickerView
后显示所选行。UIPickerView
它已被上次选中。
当我再次打开我的 PickerView 时,我希望我的 UIPickerView
设置我上次选择的选定行。
Swift有什么办法吗?
UIPickerView api 允许您 select 代码中的任何组件中的行:
func selectRow(_ row: Int,
inComponent component: Int,
animated animated: Bool)
因此,如果您为选择器的组件存储了 selected 索引,只需在再次显示选择器之前为每个组件调用此方法。
如果这是为了存储某种设置,您可能需要考虑使用像 NSUserDefaults 这样的持久存储。选择器更改后,保存 NSUserDefaults 值。然后在您的 viewDidLoad 方法中,您可以将选择器视图设置为您之前保存的行。
例如,当您检测到选择器视图 pickerView 已更改为将行存储在键 pickerViewValue 中时,使用这些行。把这个放在 pickerView 的 didSelectRow 中。
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(row, forKey: "pickerViewRow")
然后当您加载视图时,使用它来将选择器设置为保存的行:
let defaults = NSUserDefaults.standardUserDefaults()
if let pickerViewRow = defaults.stringForKey("pickerViewRow")
{
pickerView.selectRow(pickerViewRow, inComponent: 0, animated: true)
}
您可以将最后选定的行保存在 NSUserDefaults 中,将视图控制器的 viewDidLoad 中的值和选取器的选定行检索到值数组中选定值的索引。
class Pick: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
var picker = UIPickerView()
var selected: String {
return NSUserDefaults.standardUserDefaults().stringForKey("selected") ?? ""
}
var data = ["One", "Two", "Three"]
override func viewDidLoad() {
super.viewDidLoad()
picker.delegate = self
picker.dataSource = self
if let row = data.indexOf(selected) {
picker.selectRow(row, inComponent: 0, animated: false)
}
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return data.count
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return data[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
NSUserDefaults.standardUserDefaults().setObject(data[row], forKey: "selected")
}
}
为Swift3
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if(pickerView.tag==0){
//set some global variable
}
}
我想弄清楚如何在我打开 UIPickerView
后显示所选行。UIPickerView
它已被上次选中。
当我再次打开我的 PickerView 时,我希望我的 UIPickerView
设置我上次选择的选定行。
Swift有什么办法吗?
UIPickerView api 允许您 select 代码中的任何组件中的行:
func selectRow(_ row: Int,
inComponent component: Int,
animated animated: Bool)
因此,如果您为选择器的组件存储了 selected 索引,只需在再次显示选择器之前为每个组件调用此方法。
如果这是为了存储某种设置,您可能需要考虑使用像 NSUserDefaults 这样的持久存储。选择器更改后,保存 NSUserDefaults 值。然后在您的 viewDidLoad 方法中,您可以将选择器视图设置为您之前保存的行。
例如,当您检测到选择器视图 pickerView 已更改为将行存储在键 pickerViewValue 中时,使用这些行。把这个放在 pickerView 的 didSelectRow 中。
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(row, forKey: "pickerViewRow")
然后当您加载视图时,使用它来将选择器设置为保存的行:
let defaults = NSUserDefaults.standardUserDefaults()
if let pickerViewRow = defaults.stringForKey("pickerViewRow")
{
pickerView.selectRow(pickerViewRow, inComponent: 0, animated: true)
}
您可以将最后选定的行保存在 NSUserDefaults 中,将视图控制器的 viewDidLoad 中的值和选取器的选定行检索到值数组中选定值的索引。
class Pick: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
var picker = UIPickerView()
var selected: String {
return NSUserDefaults.standardUserDefaults().stringForKey("selected") ?? ""
}
var data = ["One", "Two", "Three"]
override func viewDidLoad() {
super.viewDidLoad()
picker.delegate = self
picker.dataSource = self
if let row = data.indexOf(selected) {
picker.selectRow(row, inComponent: 0, animated: false)
}
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return data.count
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return data[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
NSUserDefaults.standardUserDefaults().setObject(data[row], forKey: "selected")
}
}
为Swift3
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if(pickerView.tag==0){
//set some global variable
}
}