【问题标题】:How do I reload/refresh the UIPickerView (with new data array) based on button press?如何根据按钮按下重新加载/刷新 UIPickerView(带有新数据数组)?
【发布时间】:2011-12-22 00:58:22
【问题描述】:

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

【问题讨论】:

    标签: ios objective-c cocoa-touch uipickerview


    【解决方案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
                    }
                })
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-03-05
              • 2015-04-29
              • 2012-02-22
              • 1970-01-01
              • 1970-01-01
              • 2015-04-16
              • 1970-01-01
              相关资源
              最近更新 更多