it-swarm.com.de

Wie kann ich die UIPickerView (mit neuem Datenarray) basierend auf dem Tastendruck neu laden/aktualisieren?

 enter image description here

WENN ich einen Picker wollte, für Bundesländer/Provinzen, habe ich kein Beispiel gesehen, aber ich habe oben gezeigt, ein Picker für US/Can/Mex. Fragen Sie sich, ob Sie das NSMutableArray für UIPickerView dynamisch wechseln und es dann jedes Mal neu laden können, wenn Sie auf die US/Can/Mex-Tasten klicken? Wie mache ich das? Wie gehe ich vor? Suchen Sie jemanden, der einen Anfänger nach einem Hinweis in die richtige Richtung weist. 

54
jim4iOS

Sie müssen die Datenquelle und den Delegierten implementieren.

wenn Sie eine Taste drücken, setzen Sie einen Arrayzeiger auf das entsprechende Array.

als Anruf [thePicker reloadAllComponents];

-(IBAction) usButtonPressed:(id)sender{
    self.inputArray = self.usArray;
    [self.thePicker reloadAllComponents];
}

-(IBAction) mexicoButtonPressed:(id)sender{
    self.inputArray = self.mexicoArray;
    [self.thePicker reloadAllComponents];
}

die datenquellenmethoden:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}


- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return [self.inputArray count];
}

die Delegatmethoden:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [self.inputArray objectAtIndex:row];
}
111
vikingosegundo

Swift: xcode 6.1

// die Komponente des Kommissionierers neu laden (Verwendet dies innerhalb der Auslöseraktion oder der Schaltfläche)

self.pickerControl.reloadAllComponents();
15
Vinod Joshi

Durch anrufen 

thePicker.delegate = self;

wieder konnte ich die Auswahl mit neuen Informationen aktualisieren

6
Juan Manuel

In Swift 3 in xcode-8 schreiben Sie einfach wie unten in didSelectRow-Funktion

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {


        self.view.endEditing(false)
        yourPickerView.selectRow(0, inComponent: 0, animated: true)
        yourPickerView.reloadAllComponents();

}
3
Enamul Haque

Verwenden Sie mehrere Kommissionierer oder verwenden Sie einen Schalterblock, um zu bestimmen, welche Daten geladen werden sollen, und laden Sie den Kommissionierer erneut.

2
WrightsCS

Drücken Sie in Ihrer Taste die Aktion.

[self.pickerView selectRow:0 inComponent:0 animated:YES];
2
Jeff John

Swift 3 & 4

Ich hatte das gleiche Problem, aber keine Lösung funktioniert,

dann benutze ich DispatchQueue es funktioniert

DispatchQueue.main.async(execute: {
        self.picker.delegate = self
        self.picker.dataSource = self
        if self.pickerData.count > 0 {
            self.pickerTextField.text = self.pickerData[0]
            self.pickerTextField.isEnabled = true
        } else {
            self.pickerTextField.text = nil
            self.pickerTextField.isEnabled = false
        }
    })
0
Sumit