簡體   English   中英

顯示帶有選定行的UIPickerView

[英]Showing UIPickerView with selected row

我試圖弄清楚在上次選擇UIPickerView后如何顯示所選行。

當我再次打開PickerView時,我希望UIPickerView設置我最后一次選擇的選定行。

Swift有什么辦法嗎?

您可以將最后一個選定的行保存在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")
}

}

UIPickerView api允許您在代碼中的任何組件中選擇行:

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

因此,如果存儲選擇器組件的選定索引,則在再次顯示選擇器之前,請為每個組件調用此方法。

如果這是用於存儲某種設置,則可能要考慮使用NSUserDefaults之類的持久性存儲。 更改選擇器后,保存NSUserDefaults值。 然后,在viewDidLoad方法中,可以將選擇器視圖設置為之前保存的行。

例如,當您檢測到選擇器視圖pickerView已更改為將行存儲在鍵pickerViewValue中時,請使用這些行。 將此放入didSelectRow中以進行pickerView。

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)
}

對於Swift 3

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM