我正在尝试选择第一行作为默认值.. 在这里我试过
-(void)pickerViewLoaded{
[pickerView setShowSelectionIndicator:YES];
pickerView.delegate = self;
[pickerView reloadAllComponents];
[pickerView selectRow:1 inComponent:0 animated:YES]
}
当我在调用didSelectRow方法的viewDidLoad()上调用此方法但它选择该组件的第二行而不是第一行时,它工作正常。 当我用[pickerView selectRow:0 inComponent:0 animated:YES]调用时,它永远不会调用didSelectRow方法。
另一个问题是当我在选择分段控件时调用pickerViewLoaded方法时,它不会调用didSelectRow方法。我仍然无法确定何时可以使用viewDidLoad调用,为什么不使用segmentedControl。
全心全意,
答案 0 :(得分:2)
似乎是一个老话题,无论如何我想分享我的经验。
我遇到了同样的问题并移动了
[pickerView selectRow:0 inComponent:0 animated:YES];
到
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
只有在使用通知返回为last-row调用的titleForRow之后,才调用 selectRow:inComponent:animated 。
答案 1 :(得分:1)
现在问题已经从死里复活了......
我认为selectRow使用的索引从0开始 - 而不是1.因此0是第一行,1是第二行。
答案 2 :(得分:1)
我刚遇到同样的问题并想出来:如果所选行没有改变,则不会调用委托。此外,默认情况下会选择第0行,因此重新选择viewDidLoad
中的第0行不会触发该委托。在我的情况下,我能够直接调用委托方法,也许这也是你案例中的解决方案。