2016-02-29 15 views
7

Próbuję dowiedzieć się, jak wyświetlić wybrany wiersz po otwarciu UIPickerView po ostatnim wybraniu.Wyświetlanie UIPickerView z wybranym wierszem

Po ponownym otwarciu PickerView chcę, aby mój UIPickerView ustawił wybrany wiersz, który wybrałem w ostatnim czasie.

Czy jest jakiś sposób w Swift?

Odpowiedz

5

UIPickerView API pozwala wybrać wiersz dowolnego elementu w kodzie:

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

Więc jeśli przechowywane wybranych wskaźników dla komponentów Twojego Picker tuż wywołać tę metodę dla każdego komponentu, zanim ponownie pokazać kompletacji.

+1

Wszelkie pomysły na wprowadzenie tego kodu, gdzie? –

+0

Musisz umieścić ten kod w miejscu, w którym ustawiłeś widok pobierania. Czy to twój problem? Czy gdzieś zapisujesz wybrane indeksy? – Vladimir

2

Jeśli służy do przechowywania pewnego rodzaju ustawień, warto przyjrzeć się używaniu trwałego magazynu, takiego jak NSUserDefaults. Po zmianie selektora zapisz wartość NSUserDefaults. Następnie w swojej metodzie viewDidLoad możesz ustawić widok selektora na wiersz, który wcześniej zapisałeś.

Na przykład, użyj tych linii, gdy wykryjesz, że zmieniono widok pickerView, aby zapisać wiersz w selektorze klawiszyViewValue. Umieść to w didSelectRow dla pickerView.

let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setObject(row, forKey: "pickerViewRow") 

Wtedy, kiedy załadować widok, użyj tego, aby ustawić selektor do zapisanego rzędu:

let defaults = NSUserDefaults.standardUserDefaults() 
if let pickerViewRow = defaults.stringForKey("pickerViewRow") 
{ 
    pickerView.selectRow(pickerViewRow, inComponent: 0, animated: true) 
} 
+0

Dowolna przykładowa pomoc do kodu jest doceniana. Dzięki –

+0

Dzięki za pomoc! –

+0

w Swift 3: defaults = UserDefaults.standard defaults.set (row, forKey: "pickerViewRow") – user2867432

9

Można zaoszczędzić ostatnio wybrany wiersz w NSUserDefaults, pobrać wartość w viewDidLoad z widoku kontroler i wybrany wiersz selektora do indeksu wybranej wartości z tablicy wartości.

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

Dzięki za pomoc !! Mam to teraz. –

1

Dla Swift 3

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