如何根据按钮按下重新加载/刷新 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(带有新数据数组)?的主要内容,如果未能解决你的问题,请参考以下文章

当用户再次导航返回和前进时强制刷新/重新加载

使用浏览器后退按钮时如何强制重新加载页面?

如何在 Flutter 中重新加载 webview?

按下按钮后如何动画显示 UIPickerView?

提交按钮后如何重新加载谷歌recaptcha而不刷新页面? [复制]

如何在JavaFX中重新加载应用程序?