如何根据按下按钮重新加载/刷新UIPickerView(使用新数据阵列)?

时间:2011-12-22 00:58:22

标签: ios objective-c cocoa-touch uipickerview

enter image description here

如果我想要一个选择器,对于州/省,我还没有看到一个例子,但我在上面显示了模拟,是US / Can / Mex的选择器。想知道你能动态切换UIPickerView的NSMutableArray,然后每次点击US / Can / Mex按钮时以某种方式重新加载???我该怎么做呢我采取什么方法。寻找某人为初学者指出正确方向的线索。

7 个答案:

答案 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)

Swift 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
        }
    })