So erhalten Sie einen ausgewählten Wert aus UIPickerView

76

Ich weiß, dass Sie mit einem UIDatePicker Folgendes verwenden können:

NSDate *myDate = picker.date;

In meiner Ansicht verwende ich jedoch eine UIPickerView. Wie kann ich den Wert auf ähnliche Weise auswählen lassen? Oder muss ich dafür die Methode didSelectRow einrichten?

Update: Dieser Code funktioniert für Picker mit 1 Komponente:

NSInteger row;
NSString *weightSelected;

row = [repPicker selectedRowInComponent:0];
weightSelected = [pickerArray objectAtIndex:row];

Ich habe diesen Code für meinen Picker mit 2 Komponenten müde gemacht, aber er friert ein:

NSInteger row1, row2;
NSString *weightSelected1;
NSString *weightSelected2;

row1 = [repPicker selectedRowInComponent:0];
row2 = [repPicker selectedRowInComponent:1];
weightSelected1 = [pickerArray objectAtIndex:row1];
weightSelected2 = [pickerArray objectAtIndex:row2];
NSString *weightSelected = [NSString stringWithFormat:@"%@.%@", weightSelected1, weightSelected2];
pkamb
quelle

Antworten:

129

Sie können es auf folgende Weise erhalten:

NSInteger row;
NSArray *repeatPickerData;
UIPickerView *repeatPickerView;

row = [repeatPickerView selectedRowInComponent:0];
self.strPrintRepeat = [repeatPickerData objectAtIndex:row];
SJS
quelle
2
strPrintRepeat ist nichts anderes als eine Variable, die den Zeichenfolgenwert von PickerView speichert. Das heißt: - NSString * strPrintRepeat.
SJS
Danke Jay, ich habe es mit meinem Picker zum Laufen gebracht, der eine Komponente hat. Können Sie helfen, es zu ändern, um mit meinem Picker zu arbeiten, der 2 Komponenten hat? Ich habe den genauen Code, den ich für 1 Komponentenauswahl verwende, in die Frage eingefügt, danke.
4
Ich verstehe diese Antwort nicht ... was genau ist repeatPickerData? Wie wird das bevölkert?
Zakdances
@yourfriendzak repeatPickerData hier Ich hatte das gerade erklärt, aber es wird nicht hierher kommen. Es wird mit der viewDidLoad-Methode geliefert und enthält den Wert, den wir in UIPickerView anzeigen werden. Vielen Dank, dass Sie eine Frage gestellt haben. Wenn Sie immer noch Zweifel haben, können Sie die Frage gerne stellen.
SJS
Betrachten Sie es zur Verdeutlichung so. NSLog (@ "% @", [self.arrayFields objectAtIndex: [self.queryPicker1 selectedRowInComponent: 0]]); Wobei arrayFields das Datenarray für UIPickerView ist. Wobei queryPicker1 die UIPickerView ist. Wobei selectedRowInComponent: 0 die erste Spalte (wenn Sie 2 Spalten in Ihrer Auswahl haben und den Wert für die zweite verwenden möchten, verwenden Sie 1 anstelle von 0) der UIPickerView ist.
Sangony
34

Sie können den Text des ausgewählten Elements in einem beliebigen Abschnitt der Auswahl mithilfe derselben Funktion wie pickerView aus Ihrer benutzerdefinierten ViewController-Klasse abrufen:

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

mit dem ausgewählten Element

[myPickerView selectedRowInComponent:0]

So legen Sie den Text einer Beschriftung in einer benutzerdefinierten Zelle mit dem aktuell ausgewählten Wert aus dem 2. Abschnitt von myPickerView fest (wahrscheinlich eine Eigenschaft Ihres View Controllers).

[cell.label setText:[self pickerView:myPickerView titleForRow:[myPickerView selectedRowInComponent:1] forComponent:1]];

Ändern Sie einfach beide: 1s in: 2s usw. für jeden Abschnitt

nh32rg
quelle
16
+1 - das ist deutlich besser als die aktuell (Mist) akzeptierte Antwort. Es ist klarer, verwendet keine seltsamen Variablen, die nicht eingeführt oder erklärt wurden, und geht nicht (ohne es anzugeben) davon aus, dass das UIPickerViewDelegatedie Zeilentitel von einem Array erhält. Ehrlich gesagt sollte dies die akzeptierte Antwort sein.
Mark Amery
7

Das habe ich getan:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

    selectedEntry = [allEntries objectAtIndex:row];

}

Das selectedEntryist ein NSStringund enthält den aktuell ausgewählten Eintrag in der Auswahlansicht. Ich bin neu in Ziel C, aber ich denke, das ist viel einfacher.

Harikrishnan
quelle
5

Sie können mit der folgenden Methode auf die ausgewählte Zeile für eine bestimmte Komponente zugreifen:

- (NSInteger)selectedRowInComponent:(NSInteger)component

Andernfalls ist die Implementierung der Delegatenfunktion die einzige andere Option.

Drawag
quelle
Ok, ich habe derzeit eine dimissPickerMethode, die aufgerufen wird, wenn die Senden-Taste gedrückt wird. Ich möchte, dass der ausgewählte Wert gespeichert wird oder dass eine Schaltfläche usw. aktualisiert wird, wenn die dissmissPicker-Methode aufgerufen wird. Wie kann ich das machen? Muss ich die selectedRowInCompnentMethode hinzufügen ?
Das ist wahrscheinlich der beste Weg, ja
zog am
Ok, perfekt, kannst du mir helfen, das einzurichten? Ich habe gerade die selectedRowInComponentMethode hinzugefügt , aber was genau mache ich damit? Es soll den ausgewählten Wert zurückgeben. Ich habe auch 2 Komponenten im Clicker.
Sie können den Delegaten so einrichten, dass er den ausgewählten Wert der Auswahl verfolgt. Jedes Mal, wenn der Benutzer eine Komponente ändert, wird diese Funktion aufgerufen. Sie können die ausgewählte Zeile verwenden, um den Wert aus dem Array
abzurufen
2

Sie müssen den Delegierten des Kommissionierers genauso fragen wie Ihre Bewerbung. So mache ich das in meinem UIPickerViewDelegate:

func selectedRowValue(picker : UIPickerView, ic : Int) -> String {

    //Row Index
    let ir  = picker.selectedRow(inComponent: ic);

    //Value
    let val = self.pickerView(picker,
                              titleForRow:  ir,
                              forComponent: ic);
    return val!;
}
J-Dizzle
quelle
0

Sie müssen die didSelectRowDelegate-Methode verwenden, da a UIPickerVieweine beliebige Anzahl von Komponenten haben kann. Es gibt keinen "objectValue" oder ähnliches, denn das liegt ganz bei Ihnen.

Dave DeLong
quelle
0

Abrufen des ausgewählten Titels einer Auswahl:

let component = 0
let row = picker.selectedRow(inComponent: component)
let title = picker.delegate?.pickerView?(picker, titleForRow: row, forComponent: component)
pkamb
quelle
0
       NSInteger SelectedRow;
                   SelectedRow = [yourPickerView selectedRowInComponent:0];
                   selectedPickerString = [YourPickerArray objectAtIndex:SelectedRow];
                   self.YourTextField.text= selectedPickerString;

    // if  you want to move pickerview to selected row then 
 for (int i = 0; I<YourPickerArray.count; i++) {
  if ([[YourPickerArray objectAtIndex:i] isEqualToString:self.YourTextField.text]) { 
[yourPickerView selectRow:i inComponent:0 animated:NO];
 }
}
maan89
quelle
1
Wenn möglich, bemühen Sie sich, zusätzliche Erklärungen anstelle von nur Code bereitzustellen. Solche Antworten sind in der Regel nützlicher, da sie Mitgliedern der Community und insbesondere neuen Entwicklern helfen, die Gründe für die Lösung besser zu verstehen, und dazu beitragen können, dass keine weiteren Fragen beantwortet werden müssen.
Rajan
OK sicher. Danke für den Tipp
maan89
-2
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
   weightSelected = [pickerArray objectAtIndex:row];
}
CHELSEA
quelle
-5

Das ist meine Antwort

- (IBAction)Result:(id)sender 
{
   self.statusLabel.text = DataSource[[pickerViewTool selectedRowInComponent:0]];

}
Ahmad Alwisi
quelle