Select row After UIPickerView is loaded
Solution 1
Call it after you retrieve the data. I don't know where you load the data so this is just a mockup of what should work. If this doesn't make sense, let me know where you are loading data so I can piece it together in my head :)
-(void)viewDidLoad
{
// load data from sql
// self.someDataArray = DATAFROMSQL
[picker reloadAllComponents];
[picker selectRow:0 inComponent:0 animated:YES];
}
Solution 2
There is a common issue when a (default) UIPickerView item needs to be selected when the UIPickerView is initially shown. The problem is related to the sequence of events. From reading previous posts, it seems that the [pickerView selectRow:n] is normally called in the view controllers ViewDidLoad event. However, the UiPickerView data is only loaded after the ViewDidLoad event, which means any selection code in ViewDidLoad will have no effect. To remedy, place the selection code in ViewDidAppear;
- (void) viewDidAppear:(BOOL)animated {
[m_pickerView selectRow:nSelectedItem inComponent:0 animated:YES]; }
Solution 3
Place this wherever you initialize the UIView
that contains your UIPickerView
as a subview:
[myPickerView selectRow:rowWithTedsName inComponent:columnWithNames animated:NO];
Solution 4
I have just found that on the 4.3 SDK's the component loading behaviors are different between the iPhone and the iPad. On the iPhone, I was about to invoke selectRow: right after initializing the view before or after adding to the subview hierarchy. On iPad however, the selectRow call yielded no results. I wound up using a performSelector:withObject:afterDelay: call to wait 0.1 seconds before firing selectRow:inComponent:animated:. This had predictable results on the iPhone and iPad.
Solution 5
For Swift it's simply:
self.picker?.selectRow(0, inComponent: 0, animated: true)
Related videos on Youtube
Steve Gibson
Updated on July 05, 2022Comments
-
Steve Gibson almost 2 years
I have an iPhone database app that loads a
UIPickerView
with data from a table. I want to set the selected row to a particular row from the data in another table.For example: Let's say I have a
UIPickerView
that is loaded with X number of names of the iPhone users' friends (the number of names is variable; it could be 1 or 1000 and all are entered into the database by the user). The iPhone user has a preference set that their current best friend is TED. I want theUIPickerView
to be position to TED when displayed.Where do I call
selectRow
?I tried in
viewDidAppear
, but it was never called, intitleForRow
which caused all kinds of strange behavior.viewDidLoad
andviewWillAppear
are out of the question, because I don't know what's in the datasource to the picker yet.-
Anurag Sharma over 7 yearsJust put the @jab code in his answer after loading data and giving delegate. Thats what worked for me!
-
-
Steve Gibson about 15 yearsThanks, I am retriveing the data in the viewDidLoad just like your mockup. I had to create a method to enumerate through the list to find the matches index then set the picker. I thought maybe I was missing a callback that could used after the picker was loaded and before returning to the event loop.
-
CularBytes over 8 yearsit works, but why does it cause so much lag on loading the view? (in a tab bar situation)
-
Hattori Hanzō over 5 years@Jab your answer is correct before calling
selectRow
don't forget callreloadAllComponents
!!!! -
PAULMAX over 2 yearsHow strange! But I have a question)) Why does this sequence work? (reloadAllComponents -> selectRow)