it-swarm.com.de

Zeile auswählen Nachdem UIPickerView geladen wurde

Ich habe eine iPhone-Datenbank-App, die eine UIPickerView mit Daten aus einer Tabelle lädt. Ich möchte die ausgewählte Zeile auf eine bestimmte Zeile aus den Daten in einer anderen Tabelle setzen.

Zum Beispiel: Angenommen, ich habe eine UIPickerView, die mit X Anzahl der Namen der Freunde des iPhone-Benutzers geladen ist (die Anzahl der Namen ist variabel; sie kann 1 oder 1000 sein und alle werden vom Benutzer in die Datenbank eingegeben). Der iPhone-Benutzer hat eine Voreinstellung, dass sein bester FreundTEDist. Ich möchte, dass die UIPickerView inTEDsteht, wenn angezeigt wird.

Wo rufe ich selectRow an?

Ich versuchte es in viewDidAppear, aber es wurde nie aufgerufen, in titleForRow, was alle Arten von merkwürdigem Verhalten verursachte. viewDidLoad und viewWillAppear kommen nicht in Frage, da ich noch nicht weiß, was sich in der Datenquelle befindet.

71
Steve Gibson

Rufen Sie es auf, nachdem Sie die Daten abgerufen haben. Ich weiß nicht, wo Sie die Daten laden, also ist dies nur ein Modell dessen, was funktionieren sollte. Wenn dies keinen Sinn ergibt, lassen Sie mich wissen, wo Sie Daten laden, damit ich sie in meinem Kopf zusammensetzen kann.

-(void)viewDidLoad
{
    // load data from sql
    // self.someDataArray = DATAFROMSQL
    [picker reloadAllComponents];
    [picker selectRow:0 inComponent:0 animated:YES];
}
135
Jab

Es gibt ein häufiges Problem, wenn ein UIPickerView-Element (Standard) ausgewählt werden muss, wenn UIPickerView zum ersten Mal angezeigt wird. Das Problem hängt mit der Reihenfolge der Ereignisse zusammen. Nach dem Lesen der vorherigen Beiträge scheint es, dass [pickerView selectRow: n] normalerweise im ViewDidLoad-Ereignis der View-Controller aufgerufen wird. Die UiPickerView-Daten werden jedoch nur nach dem ViewDidLoad-Ereignis geladen. Dies bedeutet, dass der Auswahlcode in ViewDidLoad keine Auswirkungen hat. Um dies zu beheben, platzieren Sie den Auswahlcode in ViewDidAppear.

- (void) viewDidAppear:(BOOL)animated {
[m_pickerView selectRow:nSelectedItem inComponent:0 animated:YES]; }
40
nspire

Platzieren Sie dies überall dort, wo Sie die UIView initialisieren, die Ihre UIPickerView als Unteransicht enthält:

[myPickerView selectRow:rowWithTedsName inComponent:columnWithNames animated:NO];
7
Alex Reynolds

Ich habe gerade festgestellt, dass bei den 4.3 SDKs das Verhalten beim Laden von Komponenten zwischen dem iPhone und dem iPad unterschiedlich ist. Auf dem iPhone war ich gerade dabei, selectRow aufzurufen: Direkt nach dem Initialisieren der Ansicht vor oder nach dem Hinzufügen zur Unteransichtshierarchie. Auf dem iPad lieferte der selectRow-Aufruf jedoch keine Ergebnisse. Ich endete mit einem performSelector: withObject: afterDelay: Aufruf, um 0,1 Sekunden zu warten, bevor selectRow: inComponent: animated: ausgelöst wird. Dies hatte auf dem iPhone und dem iPad vorhersehbare Ergebnisse.

4
Blake Watters

Für Swift ist es einfach:

self.picker?.selectRow(0, inComponent: 0, animated: true)
2
Er. Vihar

Wenn Sie möchten, dass die ausgewählte Zeile dauerhaft markiert wird, verwenden Sie diese Option 

myPickerView.subviews[0].subviews[0].subviews[2].backgroundColor = myPickerView.tintColor;
0
user1760527