2016-02-29 104 views
7

我想弄清楚如何显示选定的行,当我上次选择后打开UIPickerView显示UIPickerView与选定的行

当我再次打开PickerView时,我想让我的UIPickerView设置我上次选择的选定行。

在Swift中有什么办法吗?

回答

5

UIPickerView API允许你在任何组件的代码选择行:

func selectRow(_ row: Int, 
    inComponent component: Int, 
     animated animated: Bool) 

所以,如果你选择了存储指数的选择器的组件,你再次显示选择器之前只是调用此方法为每个组件。

+1

为把这个代码到任何想法? –

+0

您需要将此代码放置在设置选取器视图的位置。你有问题吗?你在某处保存选定的索引吗? – Vladimir

2

如果这是用于存储某种设置,您可能需要考虑使用持久性存储,如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) 
} 
+0

任何示例代码的帮助表示赞赏。谢谢 –

+0

感谢您的帮助! –

+0

in Swift 3: let defaults = UserDefaults.standard defaults.set(row,forKey:“pickerViewRow”) – user2867432

9

您可以保存在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") 
} 

} 
+0

感谢您的帮助!!我现在明白了。 –

1

对于斯威夫特3

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    if(pickerView.tag==0){ 
     //set some global variable 
    } 
}