web-dev-qa-db-ja.com

選択した行でUIPickerViewを表示

前回選択した後、UIPickerViewを開いたときに、選択した行を表示する方法を見つけようとしています。

PickerViewを再度開いたときに、UIPickerViewで前回選択した選択行を設定します。

Swiftに方法はありますか?

13
Thiha Aung

UIPickerView APIを使用すると、コード内の任意のコンポーネントの行を選択できます。

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

したがって、ピッカーのコンポーネント用に選択したインデックスを保存した場合は、ピッカーを再び表示する前に、各コンポーネントに対してこのメ​​ソッドを呼び出すだけです。

9
Vladimir

NSUserDefaultsに最後に選択した行を保存し、View Controllerの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")
}

}
18
Ahmed Onawale

Swiftの場合

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

これが何らかの設定を保存するためのものである場合、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)
}
2
yesthisisjoe