UIPicker设置默认值和更新组件

时间:2017-03-01 03:59:51

标签: swift

我有一个带有两个组件的UIPicker。第二个组件中的值根据第一个组件选择而变化。

但是,如果我以编程方式设置第一个组件的值,则第二个组件不会更新。

此代码包含在viewDidLoad()中:

UnitPicker.dataSource = self;
UnitPicker.delegate = self;
UnitPicker.selectRow(temporaryTask.quantityFormat.rawValue, inComponent: 0, animated: false);
UnitPicker.reloadAllComponents();

if (UnitPicker.selectedRow(inComponent: 0) == 1)
{
    UnitPicker.selectRow(temporaryTask.quantityUnit.rawValue, inComponent: 1, animated: false);
    UnitPicker.reloadComponent(1);
}
else if (UnitPicker.selectedRow(inComponent: 0) == 2)
{
    UnitPicker.selectRow(temporaryTask.quantityUnit.rawValue - 3, inComponent: 1, animated: false);
    UnitPicker.reloadComponent(1);
}

以下是委托函数之一:

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
{
    if (component == 0)
    {
        return units.count;
    }
    else if (component == 1)
    {
        if (pickerView.selectedRow(inComponent: 0) == 1)
        {
            return weightTypes.count;
        }
        else if (pickerView.selectedRow(inComponent: 0) == 2)
        {
            return timeTypes.count;
        }
    }

    return 1;
}

预期结果(当用户选择第一个组件时):

Expected Result

实际结果(当我在代码中设置第一个组件时):

Actual Result

然后,如果用户选择"重量"然后"时间",第二个组件正确显示。

出于某种原因,它只显示一行,我认为这是因为"返回1;"线。

预先感谢任何回复:)

2 个答案:

答案 0 :(得分:1)

我认为你误认为selectedRows的索引

if (UnitPicker.selectedRow(inComponent: 0) == 1)
else if (UnitPicker.selectedRow(inComponent: 0) == 2)

应该是

if (UnitPicker.selectedRow(inComponent: 0) == 0)
else if (UnitPicker.selectedRow(inComponent: 0) == 1)

也可以在委托上执行此操作。

答案 1 :(得分:0)

将代码从viewDidLoad()移到viewDidLayoutSubviews()修复了问题:)