我有一个带有两个组件的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;
}
预期结果(当用户选择第一个组件时):
实际结果(当我在代码中设置第一个组件时):
然后,如果用户选择"重量"然后"时间",第二个组件正确显示。
出于某种原因,它只显示一行,我认为这是因为"返回1;"线。
预先感谢任何回复:)
答案 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()修复了问题:)