select行UIPickerView加载后
我有一个iphone数据库应用程序,从表中加载一个UIPickerView
数据。 我想从另一个表中的数据设置选定的行到特定的行。
例如:可以说,我有一个UIPickerView
,加载了iPhone用户朋友的X个名字(名字的数量是可变的,可能是1或1000,并且全部由用户input到数据库中)。 iPhone用户有一个偏好设置,他们目前最好的朋友是TED。 我希望UIPickerView
在显示时定位到TED。
我在哪里打电话给selectRow
?
我尝试了viewDidAppear
但它从来没有被调用,在titleForRow
导致各种奇怪的行为。 viewDidLoad
和viewWillAppear
是没有问题的,因为我不知道数据源中的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]; }
把你的UIPickerView
的UIView
初始化为子视图的地方:
[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;