州/県のピッカーが必要な場合は、例を見ていませんが、上記の米国/ Can/Mexのピッカーのモックアップを作成しました。 UIPickerViewのNSMutableArrayを動的に切り替えて、US/Can/Mexボタンをクリックするたびに何らかの方法でリロードさせることができますか?これを行うにはどうすればいいですか。どのようなアプローチを取りますか。正しい方向への手がかりを初心者に向けてくれる人を探しています。
データソースとデリゲートを実装する必要があります。
ボタンを押したら、配列ポインターを適切な配列に設定します。
[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];
}
Swift:xcode 6.1
//ピッカーのコンポーネントをリロードします(トリガーアクションまたはボタン内でこれを使用しました)
self.pickerControl.reloadAllComponents();
電話で
thePicker.delegate = self;
再び、私は新しい情報でピッカービューを強制的に更新することができました
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();
}
複数のピッカーを使用するか、スイッチブロックを使用してロードするデータを決定し、ピッカーをリロードします。
ボタンを押すアクションで、
[self.pickerView selectRow:0 inComponent:0 animated:YES];
私は同じ問題を抱えていましたが、解決策はありません、
それから私はそれが動作する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
}
})