Если я хотел выбрать сборщик для штатов/провинций, я не видел такого примера, но я сделал макет, показанный выше, сборщик для США/Кан/Мекс. интересно, можно ли динамически переключать NSMutableArray для UIPickerView, а затем как-нибудь перезагружать его каждый раз, когда вы нажимаете кнопки US/Can/Mex??? Как мне сделать это? Какой подход я выберу. Ищете кого-то, чтобы указать новичку для подсказки в правильном направлении.
Как перезагрузить/обновить UIPickerView (с новым массивом данных) на основе нажатия кнопки?
Ответ 1
Вам придется реализовать источник данных и делегат.
как только вы нажмете кнопку, установите указатель массива на соответствующий массив.
чем вызов [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];
}
Ответ 2
Swift: xcode 6.1
//перезагрузите компонент сборщика (используется внутри действия триггера или кнопки)
self.pickerControl.reloadAllComponents();
Ответ 3
Вызывая
thePicker.delegate = self;
снова, я смог принудительно обновить pickerview с помощью новой информации
Ответ 4
В swift 3 в 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();
}
Ответ 5
Используйте несколько сборщиков или используйте блок переключателей, чтобы определить, какие данные должны быть загружены, и перезагрузите сборщик.
Ответ 6
В вашей кнопке нажмите действие,
[self.pickerView selectRow:0 inComponent:0 animated:YES];
Ответ 7
Свифт 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
}
})