如何根据按钮按下重新加载/刷新 UIPickerView(带有新数据数组)?
Posted
技术标签:
【中文标题】如何根据按钮按下重新加载/刷新 UIPickerView(带有新数据数组)?【英文标题】:How do I reload/refresh the UIPickerView (with new data array) based on button press? 【发布时间】:2011-12-22 00:58:22 【问题描述】:如果我想要一个用于州/省的选择器,我还没有看到示例,但我模拟了上面显示的,美国/加拿大/墨西哥的选择器。想知道您能否为 UIPickerView 动态切换 NSMutableArray,然后每次单击 US/Can/Mex 按钮时以某种方式重新加载它?我该怎么做。我采取什么方法。寻找某人为初学者指出正确方向的线索。
【问题讨论】:
【参考方案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];
【讨论】:
感谢您为我指明正确的方向。我是新手。好的,很高兴看到它有一个类方法。并且它“调用此方法会导致选取器视图向委托查询所有组件的新数据”非常酷。我当前的 UI 选择器具有数据源和委托方法 :-) 很好。我正在使用一本书,不知道答案在 Class 文档的实例方法中是否正确。再次感谢。【参考方案2】:斯威夫特:xcode 6.1
//重新加载picker的组件(在触发动作或按钮中使用这个)
[self.pickerControl reloadAllComponents];
【讨论】:
这根本没有回答问题。【参考方案3】:在 swift 3、4 或 5 中,您只需编写如下所示的 didSelectRow 函数
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
self.view.endEditing(false)
yourPickerView.selectRow(0, inComponent: 0, animated: true)
yourPickerView.reloadAllComponents();
【讨论】:
【参考方案4】:通过调用
thePicker.delegate = self;
再次,我能够使用新信息强制刷新选择器视图
【讨论】:
【参考方案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
)
【讨论】:
以上是关于如何根据按钮按下重新加载/刷新 UIPickerView(带有新数据数组)?的主要内容,如果未能解决你的问题,请参考以下文章