ios-如何根据按钮按下方式重新加载/刷新UIPickerView(带有新的数据数组)?
如果我想要一个州/省的选择器,我还没有看到一个例子,但是我在上面显示的模型中做了一个美国/加拿大/墨西哥的选择器。 想知道您是否可以为UIPickerView动态切换NSMutableArray,然后每次单击US / Can / Mex按钮以某种方式重新加载它? 我该怎么做。 我应该采取什么方法。 寻找某人为初学者指出正确方向的线索。
7个解决方案
116 votes
您将必须实现数据源和委托。
按下按钮后,将数组指针设置为适当的数组。
比通话[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];
}
vikingosegundo answered 2019-11-11T04:02:45Z
18 votes
斯威夫特:xcode 6.1
//重新加载选择器的组件(在触发器动作或按钮内部使用)
self.pickerControl.reloadAllComponents();
Vinod Joshi answered 2019-11-11T04:03:16Z
6 votes
通过致电
thePicker.delegate = self;
再次,我能够用新信息强制刷新pickerview
Juan Manuel answered 2019-11-11T04:03:47Z
3 votes
在xcode-8中的swift 3中,您只需像下面这样写出didSelectRow函数
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
self.view.endEditing(false)
yourPickerView.selectRow(0, inComponent: 0, animated: true)
yourPickerView.reloadAllComponents();
}
Enamul Haque answered 2019-11-11T04:04:10Z
2 votes
使用多个选择器,或使用切换块来确定应加载哪些数据,然后重新加载选择器。
WrightsCS answered 2019-11-11T04:04:35Z
2 votes
在您的按钮按下动作中,
[self.pickerView selectRow:0 inComponent:0 animated:YES];
Jeff John answered 2019-11-11T04:05:02Z
0 votes
斯威夫特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
}
})
Sumit answered 2019-11-11T04:05:34Z