select行UIPickerView加载后

我有一个iphone数据库应用程序,从表中加载一个UIPickerView数据。 我想从另一个表中的数据设置选定的行到特定的行。

例如:可以说,我有一个UIPickerView ,加载了iPhone用户朋友的X个名字(名字的数量是可变的,可能是1或1000,并且全部由用户input到数据库中)。 iPhone用户有一个偏好设置,他们目前最好的朋友是TED。 我希望UIPickerView在显示时定位到TED。

我在哪里打电话给selectRow

我尝试了viewDidAppear但它从来没有被调用,在titleForRow导致各种奇怪的行为。 viewDidLoadviewWillAppear是没有问题的,因为我不知道数据源中的select器是什么。

提前致谢。

检索数据后调用它。 我不知道你在哪里加载数据,所以这只是一个应该工作的模型。 如果这没有意义,让我知道你正在加载数据,所以我可以把它拼凑在我的头:)

 -(void)viewDidLoad { // load data from sql // self.someDataArray = DATAFROMSQL [picker reloadAllComponents]; [picker selectRow:0 inComponent:0 animated:YES]; } 

当初始显示UIPickerView时,需要select(默认)UIPickerView项目时存在一个常见问题。 问题与事件的顺序有关。 从阅读以前的post,似乎通常在视图控制器ViewDidLoad事件中调用[pickerView selectRow:n]。 但是,UiPickerView数据仅在ViewDidLoad事件之后加载,这意味着ViewDidLoad中的任何select代码都不起作用。 为了补救,将select代码放在ViewDidAppear中;

 - (void) viewDidAppear:(BOOL)animated { [m_pickerView selectRow:nSelectedItem inComponent:0 animated:YES]; } 

把你的UIPickerViewUIView初始化为子视图的地方:

 [myPickerView selectRow:rowWithTedsName inComponent:columnWithNames animated:NO]; 

我刚刚发现在4.3 SDK上,iPhone和iPad的组件加载行为是不同的。 在iPhone上,我正要在添加到子视图层次结构之前或之后初始化视图之后调用selectRow:right。 然而在iPad上,selectRow调用没有结果。 我结束使用performSelector:withObject:afterDelay:调用之前0.1秒发射selectRow:inComponent:animation:。 这在iPhone和iPad上有了可预测的结果。

对于迅捷而言,这很简单

 self.picker?.selectRow(0, inComponent: 0, animated: true) 

如果你想要选中的行永久高亮使用这个

 myPickerView.subviews[0].subviews[0].subviews[2].backgroundColor = myPickerView.tintColor;