Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set a default Value of a UIPickerView

I have a problem with my UIPickerView. I have 3 values in it EU AP and NA. When I start the app EU seems to be selected but when I make a NSLog(@"%@", [regions objectAtIndex:row]); I only get back (null), now when I touch the UIPickerView the EU value is selected and I get "EU" back from a NSLog.

My question is:

How can I define a default value which is selected (not only the label) when the user only starts the app and touches nothing.

Edit: Here is my code to get the selected item:

#pragma mark - #pragma mark PickerView DataSource  - (NSInteger)numberOfComponentsInPickerView: (UIPickerView *)pickerView {     return 1; } - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {     return [regions count]; } - (NSString *)pickerView:(UIPickerView *)pickerView              titleForRow:(NSInteger)row             forComponent:(NSInteger)component {     return [regions objectAtIndex:row]; }  #pragma mark - #pragma mark PickerView Delegate -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row       inComponent:(NSInteger)component {                  selectedRegion = [[NSString alloc] initWithFormat:                               @"%@", [regions objectAtIndex:row]];     NSLog(@"%@", selectedRegion);   } 
like image 465
Chris Avatar asked Aug 02 '12 12:08

Chris


2 Answers

TL:DR version:

//Objective-C [self.picker selectRow:2 inComponent:0 animated:YES]; //Swift picker.selectRow(2, inComponent:0, animated:true) 

Either you didn't set your picker to select the row (which you say you seem to have done but anyhow):

- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated 

OR you didn't use the the following method to get the selected item from your picker

- (NSInteger)selectedRowInComponent:(NSInteger)component 

This will get the selected row as Integer from your picker and do as you please with it. This should do the trick for yah. Good luck.

Anyhow read the ref: https://developer.apple.com/documentation/uikit/uipickerview


EDIT:

An example of manually setting and getting of a selected row in a UIPickerView:

the .h file:

#import <UIKit/UIKit.h>  @interface ViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> {     UIPickerView *picker;     NSMutableArray *source; }  @property (nonatomic,retain) UIPickerView *picker; @property (nonatomic,retain) NSMutableArray *source;  -(void)pressed;  @end 

the .m file:

#import "ViewController.h"  @interface ViewController ()  @end @implementation ViewController  @synthesize picker; @synthesize source;  - (void)viewDidLoad {     [super viewDidLoad];     // Do any additional setup after loading the view, typically from a nib. }  - (void)viewDidUnload {     [super viewDidUnload];     // Release any retained subviews of the main view. }  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {     return YES; }  - (void) viewWillAppear:(BOOL)animated {     [super viewWillAppear:animated];      self.view.backgroundColor = [UIColor yellowColor];      self.source = [[NSMutableArray alloc] initWithObjects:@"EU", @"USA", @"ASIA", nil];      UIButton *pressme = [[UIButton alloc] initWithFrame:CGRectMake(20, 20, 280, 80)];     [pressme setTitle:@"Press me!!!" forState:UIControlStateNormal];     pressme.backgroundColor = [UIColor lightGrayColor];     [pressme addTarget:self action:@selector(pressed) forControlEvents:UIControlEventTouchUpInside];     [self.view addSubview:pressme];      self.picker = [[UIPickerView alloc] initWithFrame:CGRectMake(20, 110, 280, 300)];     self.picker.delegate = self;     self.picker.dataSource = self;     [self.view addSubview:self.picker];      //This is how you manually SET(!!) a selection!     [self.picker selectRow:2 inComponent:0 animated:YES]; }  //logs the current selection of the picker manually -(void)pressed {     //This is how you manually GET(!!) a selection     int row = [self.picker selectedRowInComponent:0];      NSLog(@"%@", [source objectAtIndex:row]); }  - (NSInteger)numberOfComponentsInPickerView: (UIPickerView *)pickerView {     return 1; }  - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {     return [source count]; }  - (NSString *)pickerView:(UIPickerView *)pickerView              titleForRow:(NSInteger)row             forComponent:(NSInteger)component {     return [source objectAtIndex:row]; }  #pragma mark - #pragma mark PickerView Delegate -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row       inComponent:(NSInteger)component { //    NSLog(@"%@", [source objectAtIndex:row]); }  @end 

EDIT for Swift solution (Source: Dan Beaulieu's answer)

Define an Outlet:

@IBOutlet weak var pickerView: UIPickerView!  // for example 

Then in your viewWillAppear or your viewDidLoad, for example, you can use the following:

pickerView.selectRow(rowMin, inComponent: 0, animated: true) pickerView.selectRow(rowSec, inComponent: 1, animated: true) 

If you inspect the Swift 2.0 framework you'll see .selectRow defined as:

func selectRow(row: Int, inComponent component: Int, animated: Bool)  

option clicking .selectRow in Xcode displays the following:

like image 130
Totumus Maximus Avatar answered Sep 19 '22 06:09

Totumus Maximus


This is How to set a default Value of a UIPickerView

[self.picker selectRow:4 inComponent:0 animated:YES]; 
like image 26
Hardik Darji Avatar answered Sep 21 '22 06:09

Hardik Darji