-1

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

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

谢谢大家,

4

3 回答 3

2

似乎是一个老线程,反正我想分享我的经验。

我有同样的问题并移动了

[pickerView selectRow:0 inComponent:0 animated:YES];

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;

只有在使用通知返回最后一行调用的 titleForRow 后,我才调用selectRow:inComponent:animated 。

于 2011-05-20T12:21:53.007 回答
1

我刚刚遇到了同样的问题并想通了:如果选定的行没有改变,则不会调用委托。此外,默认选择第 0 行,因此重新选择第 0 行viewDidLoad不会触发委托。就我而言,我可以直接调用委托方法,也许这也是您的解决方案。

于 2012-03-03T20:35:16.103 回答
1

现在这个问题已经从死里提出来了……

我认为 selectRow 使用从 0 开始的索引,而不是 1。所以 0 是第一行,1 是第二行。

于 2011-05-20T12:26:23.853 回答