显示带选定行的UIPickerView

Thi*_*ung 13 uipickerview ios swift

我试图弄清楚如何在我UIPickerView上次选择后打开时显示所选行.

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

Swift有什么办法吗?

Ahm*_*ale 18

您可以将最后选定的行保存在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")
}

}
Run Code Online (Sandbox Code Playgroud)


Vla*_*mir 10

UIPickerView api允许您在代码中的任何组件中选择行:

func selectRow(_ row: Int,
   inComponent component: Int,
      animated animated: Bool)
Run Code Online (Sandbox Code Playgroud)

因此,如果您为选择器的组件存储了选定的索引,则在再次显示选择器之前,请为每个组件调用此方法.


yes*_*joe 5

如果这是为了存储某种设置,您可能需要考虑使用持久存储,例如 NSUserDefaults。当选择器更改时,保存 NSUserDefaults 值。然后在 viewDidLoad 方法中,您可以将选取器视图设置为您之前保存的行。

例如,当您检测到选取器视图 pickerView 已更改以将行存储在键 pickerViewValue 中时,请使用这些行。将其放入 pickerView 的 didSelectRow 中。

let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(row, forKey: "pickerViewRow")
Run Code Online (Sandbox Code Playgroud)

然后,当您加载视图时,使用它将选择器设置为保存的行:

let defaults = NSUserDefaults.standardUserDefaults()
if let pickerViewRow = defaults.stringForKey("pickerViewRow")
{
    pickerView.selectRow(pickerViewRow, inComponent: 0, animated: true)
}
Run Code Online (Sandbox Code Playgroud)