如果我想要一个选择器,对于州/省,我还没有看到一个例子,但我在上面显示了模拟,是US / Can / Mex的选择器。想知道你能动态切换UIPickerView的NSMutableArray,然后每次点击US / Can / Mex按钮时以某种方式重新加载???我该怎么做呢我采取什么方法。寻找某人为初学者指出正确方向的线索。
答案 0 :(得分:115)
您必须实现数据源和委托。
按下按钮后,将数组指针设置为相应的数组。
而不是致电[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];
}
答案 1 :(得分:16)
Swift:xcode 6.1
//重新加载选择器的组件(在触发器操作或按钮内使用)
self.pickerControl.reloadAllComponents();
答案 2 :(得分:6)
致电
thePicker.delegate = self;
再一次,我能够使用新信息强制刷新选择器视图
答案 3 :(得分:3)
在xcode-8中的swift 3中,你只需要写下像didlow
这样的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 :(得分:2)
使用多个选择器,或使用开关块确定应加载哪些数据,然后重新加载选择器。
答案 5 :(得分:2)
在按钮按下操作中,
[self.pickerView selectRow:0 inComponent:0 animated:YES];
答案 6 :(得分:0)
我遇到了同样的问题,但没有解决办法,
然后我使用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
}
})