web-dev-qa-db-ja.com

ボタンの押下に基づいてUIPickerViewを(新しいデータ配列で)再読み込み/更新するにはどうすればよいですか?

enter image description here

州/県のピッカーが必要な場合は、例を見ていませんが、上記の米国/ Can/Mexのピッカーのモックアップを作成しました。 UIPickerViewのNSMutableArrayを動的に切り替えて、US/Can/Mexボタンをクリックするたびに何らかの方法でリロードさせることができますか?これを行うにはどうすればいいですか。どのようなアプローチを取りますか。正しい方向への手がかりを初心者に向けてくれる人を探しています。

56
jim4iOS

データソースとデリゲートを実装する必要があります。

ボタンを押したら、配列ポインターを適切な配列に設定します。

[thePicker reloadAllComponents];

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

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

データソースメソッド:

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


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

デリゲートメソッド:

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

Swift:xcode 6.1

//ピッカーのコンポーネントをリロードします(トリガーアクションまたはボタン内でこれを使用しました)

self.pickerControl.reloadAllComponents();
17
Vinod Joshi

電話で

thePicker.delegate = self;

再び、私は新しい情報でピッカービューを強制的に更新することができました

6
Juan Manuel

Swift 3 in xcode-8では、次のようなdidSelectRow関数を記述するだけです。

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

複数のピッカーを使用するか、スイッチブロックを使用してロードするデータを決定し、ピッカーをリロードします。

2
WrightsCS

ボタンを押すアクションで、

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

スイフト3および4

私は同じ問題を抱えていましたが、解決策はありません、

それから私はそれが動作するDispatchQueueを使用します

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