前回選択した後、UIPickerView
を開いたときに、選択した行を表示する方法を見つけようとしています。
PickerViewを再度開いたときに、UIPickerView
で前回選択した選択行を設定します。
Swiftに方法はありますか?
UIPickerView APIを使用すると、コード内の任意のコンポーネントの行を選択できます。
func selectRow(_ row: Int,
inComponent component: Int,
animated animated: Bool)
したがって、ピッカーのコンポーネント用に選択したインデックスを保存した場合は、ピッカーを再び表示する前に、各コンポーネントに対してこのメソッドを呼び出すだけです。
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")
}
}
Swiftの場合
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if(pickerView.tag==0){
//set some global variable
}
}
これが何らかの設定を保存するためのものである場合、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)
}