UIPicker selectRow

时间:2010-08-18 15:16:10

标签: iphone objective-c uipickerview uipickerviewcontroller

我正在尝试选择第一行作为默认值.. 在这里我试过

-(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。

全心全意,

3 个答案:

答案 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行不会触发该委托。在我的情况下,我能够直接调用委托方法,也许这也是你案例中的解决方案。