【发布时间】:2011-12-22 00:58:22
【问题描述】:
如果我想要一个用于州/省的选择器,我还没有看到示例,但我模拟了上面显示的,美国/加拿大/墨西哥的选择器。想知道您能否为 UIPickerView 动态切换 NSMutableArray,然后每次单击 US/Can/Mex 按钮时以某种方式重新加载它?我该怎么做。我采取什么方法。寻找某人为初学者指出正确方向的线索。
【问题讨论】:
标签: ios objective-c cocoa-touch uipickerview
如果我想要一个用于州/省的选择器,我还没有看到示例,但我模拟了上面显示的,美国/加拿大/墨西哥的选择器。想知道您能否为 UIPickerView 动态切换 NSMutableArray,然后每次单击 US/Can/Mex 按钮时以某种方式重新加载它?我该怎么做。我采取什么方法。寻找某人为初学者指出正确方向的线索。
【问题讨论】:
标签: ios objective-c cocoa-touch uipickerview
您必须实现数据源和委托。
按下按钮后,将数组指针设置为适当的数组。
打电话[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];
}
【讨论】:
斯威夫特:xcode 6.1
//重新加载picker的组件(在触发动作或按钮中使用这个)
[self.pickerControl reloadAllComponents];
【讨论】:
在 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();
}
【讨论】:
通过调用
thePicker.delegate = self;
再次,我能够使用新信息强制刷新选择器视图
【讨论】:
使用多个选择器,或使用开关块来确定应加载哪些数据,然后重新加载选择器。
【讨论】:
在您的按钮按下动作中,
[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
}
})
【讨论】: