Ich habe eine iPhone-Datenbank-App, die eine UIPickerView
mit Daten aus einer Tabelle lädt . Ich möchte die ausgewählte Zeile aus den Daten in einer anderen Tabelle auf eine bestimmte Zeile setzen.
Zum Beispiel: Angenommen, ich habe eine UIPickerView
, die mit X Namen der Freunde der iPhone-Benutzer 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 festgelegt, dass sein derzeit bester Freund TED ist . Ich möchte UIPickerView
, dass die Position bei Anzeige auf TED gesetzt wird.
Wo rufe ich an selectRow
?
Ich habe es versucht viewDidAppear
, aber es wurde nie aufgerufen, titleForRow
was zu allerlei seltsamem Verhalten führte. viewDidLoad
und viewWillAppear
kommen nicht in Frage, weil ich noch nicht weiß, was in der Datenquelle für den Picker ist.
quelle
Antworten:
Rufen Sie es auf, nachdem Sie die Daten abgerufen haben. Ich weiß nicht, wo Sie die Daten laden, daher 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 zusammenfügen kann :)
-(void)viewDidLoad { // load data from sql // self.someDataArray = DATAFROMSQL [picker reloadAllComponents]; [picker selectRow:0 inComponent:0 animated:YES]; }
quelle
selectRow
du anrufst vergiss den Anruf nichtreloadAllComponents
!!!!Es tritt häufig ein Problem auf, wenn ein (Standard-) UIPickerView-Element ausgewählt werden muss, wenn UIPickerView zum ersten Mal angezeigt wird. Das Problem hängt mit der Abfolge der Ereignisse zusammen. Aus dem Lesen früherer Beiträge geht hervor, dass [pickerView selectRow: n] normalerweise im ViewDidLoad-Ereignis des View Controllers aufgerufen wird. Die UiPickerView-Daten werden jedoch erst nach dem ViewDidLoad-Ereignis geladen. Dies bedeutet, dass Auswahlcodes in ViewDidLoad keine Auswirkung haben. Um dies zu beheben, platzieren Sie den Auswahlcode in ViewDidAppear.
- (void) viewDidAppear:(BOOL)animated { [m_pickerView selectRow:nSelectedItem inComponent:0 animated:YES]; }
quelle
Platzieren Sie dies überall dort, wo Sie das initialisieren
UIView
, das IhreUIPickerView
als Unteransicht enthält:[myPickerView selectRow:rowWithTedsName inComponent:columnWithNames animated:NO];
quelle
Ich habe gerade festgestellt, dass das Ladeverhalten der Komponenten in den 4.3 SDKs zwischen dem iPhone und dem iPad unterschiedlich ist. Auf dem iPhone wollte ich selectRow aufrufen: direkt nach dem Initialisieren der Ansicht vor oder nach dem Hinzufügen zur Unteransichtshierarchie. Auf dem iPad ergab der Aufruf von selectRow jedoch keine Ergebnisse. Ich habe einen performSelector: withObject: afterDelay: -Aufruf ausgeführt, um 0,1 Sekunden zu warten, bevor selectRow: inComponent: animiert: ausgelöst wird. Dies hatte vorhersehbare Ergebnisse auf dem iPhone und iPad.
quelle
Für Swift ist es einfach:
self.picker?.selectRow(0, inComponent: 0, animated: true)
quelle
Wenn Sie möchten, dass die ausgewählte Zeile dauerhaft hervorgehoben wird, verwenden Sie diese Option
myPickerView.subviews[0].subviews[0].subviews[2].backgroundColor = myPickerView.tintColor;
quelle