加载UIPickerView之后选择行


76

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

例如:假设我有一个UIPickerView加载了X个iPhone用户朋友的名字的名字(名字的数目是可变的;它可以是1或1000,并且所有这些都由用户输入到数据库中)。iPhone用户有一个偏好设置,即他们当前最好的朋友是TED。我希望显示时UIPickerView位于TED的位置。

我在哪里打电话selectRow

我尝试了viewDidAppear,但从未尝试过,它titleForRow引起了各种各样的奇怪行为。viewDidLoadviewWillAppear没有问题,因为我还不知道选择器的数据源中有什么。


加载数据并提供委托后,只需将@jab代码放入他的答案中即可。那对我有用!
阿努拉格·夏尔马

Answers:


140

检索数据后调用它。我不知道您将数据加载到哪里,所以这只是应该工作的模型。如果这没有任何意义,请告诉我您要将数据加载到哪里,以便我可以将它们拼凑在一起:)

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

谢谢,我正像您的模型一样在viewDidLoad中检索数据。我必须创建一种方法来枚举列表以找到匹配索引,然后设置选择器。我以为也许我错过了一个回调,该回调可以在加载选择器之后且返回事件循环之前使用。
史蒂夫·吉布森

它可以工作,但是为什么它会导致加载视图时出现如此大的滞后?(在标签栏的情况下)
CularBytes 2015年

@Jab在致电前您的答案是正确的 selectRow不要忘了打电话reloadAllComponents!!!!
HattoriHanzō19年

44

最初显示UIPickerView时需要选择一个(默认)UIPickerView项目时,这是一个常见的问题。问题与事件的顺序有关。通过阅读以前的文章,似乎通常在视图控制器的ViewDidLoad事件中调用[pickerView selectRow:n]。但是,仅在ViewDidLoad事件之后才加载UiPickerView数据,这意味着ViewDidLoad中的任何选择代码均无效。要解决此问题,请将选择代码放置在ViewDidAppear中。

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

7

将此放置在初始化UIView包含UIPickerView子视图的的任何位置:

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

4

我刚刚发现在4.3 SDK上,iPhone和iPad的组件加载行为不同。在iPhone上,我正要在添加子视图层次结构之前或之后初始化视图之后调用selectRow:。但是,在iPad上,selectRow调用未产生任何结果。我使用performSelector:withObject:afterDelay:调用结束,在调用selectRow:inComponent:animated:之前等待0.1秒。在iPhone和iPad上,这具有可预期的结果。


3

对于Swift来说,它就是:

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

0

如果要使所选行永久突出显示,请使用此

myPickerView.subviews[0].subviews[0].subviews[2].backgroundColor = myPickerView.tintColor;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.