【问题标题】:Return numberOfRowsInComponent & titleForRow in UIPickerview based on another UIpickerview's didSelectRow根据另一个 UIpickerview 的 didSelectRow 返回 UIPickerview 中的 numberOfRowsInComponent 和 titleForRow
【发布时间】:2015-12-01 03:00:59
【问题描述】:

祝大家今天好,

我尝试在主题行中解释我的查询。 据我了解以及我在代码中看到的,所有的pickerviews 都在ViewDidLoad() 中初始化,这意味着它们都有自己的数据集。 作为我的数据验证的一部分,在这种情况下非常重要,我想根据之前的选择设置以下选择器视图。

我遇到困难的地方是用“新”数据填充以下选择器视图的标题并重新加载视图。

理想情况下,我希望视图显示为之前的选择。

如果您知道如何在逻辑上做到这一点,请告诉我,我将不胜感激此刻能得到的任何帮助!

【问题讨论】:

  • 意味着你有 2 个选择器视图,改变了选择器 1,选择器 2 设置为选择器 1 的前一个?
  • 让我解释一下数据。注册用户时设置一定的值,例如8。
  • 让我解释一下数据。注册时,用户设置了某个值,例如 8。稍后用户根据值 8 输入另一组数据,其中包含 4 个子集。对于用户输入的第一个子集,例如。 3,这意味着其余子集的总数必须为 5 而不再是 8。所以下一个pickerview将只有5行而不是8行。等等。我想我也可以在 pickerview 中有 4 个组件,而不是更多的 pickerviews。那么问题将是如何添加其他组件,因为选择了先前的组件?希望这是有道理的。

标签: ios swift uipickerview


【解决方案1】:

我不太确定您所说的逻辑是什么意思,但您只是使用 if 语句和开关来确定已选择的内容以及根据该选择呈现的内容。然后你重新加载数据。

func pickerView(pickerView: UIPickerView,
            didSelectRow row: Int,
             inComponent component: Int)
{
    if component == 0
    {
        switch row{
        case 0:
           self.titlesForComponentOne = ["One","Two","Three","Four"]
        case 1:
           self.titlesForComponentOne = ["One","Two"]
        default:
           self.titlesForComponentOne = ["One","Three","Four"]
         }
     }else if component == 1
     {
         switch row{
         case 0:
            self.titlesForComponentTwo = ["Three", "Four"]
         case 1:
         ….
     self.picker.reloadAllComponents() // or just ones that need to be updated
}

func pickerView( pickerView: UIPickerView,
numberOfRowsInComponent component: Int) -> Int
{
    switch component{
    case 0:
       return self.titlesForComponentZero.count
    case 1:
       return self.titlesForComponentOne.count
    case 2:
       ….  
}

【讨论】:

  • 非常感谢!我原以为会是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多