2016-02-29 109 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 
    } 
}