Blog coding and discussion of coding about JavaScript, PHP, CGI, general web building etc.

Friday, December 18, 2015

How to set a default Value of a UIPickerView

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);      }  

Answer by Totumus Maximus for How to set a default Value of a UIPickerView


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/library/ios/#documentation/uikit/reference/UIPickerView_Class/Reference/UIPickerView.html


EDIT:

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

the .h file:

#import     @interface ViewController : UIViewController   {      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  

Answer by Per Arve for How to set a default Value of a UIPickerView


You have to send - (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated to the picker view before it appears. The documentation states that the method selectedRowInComp... will give -1, thus it is possible that the picker view is in a state with no selected row. It turns out to be in that state when created.

Answer by Hardik Darji for How to set a default Value of a UIPickerView


This is How to set a default Value of a UIPickerView

[self.picker selectRow:4 inComponent:0 animated:YES];  

Answer by Ryan Wu for How to set a default Value of a UIPickerView


In normal case, you can do something like this in viewDidLoad method;

[_picker selectRow:1 inComponent:0 animated:YES];

In my case, I'd like to fetch data from api server and display them onto UIPickerView then I want the picker to select the first item by default.

The UIPickerView will look like it selected the first item after it was created, but when you try to get the selected index by using selectedRowInComponent, you will get NSNull. That's because it detected nothing changed by the user (select 0 from 0 ).

Following is my solution (in viewWillAppear, after I fetched the data)

[_picker selectRow:1 inComponent:0 animated:NO];  [_picker selectRow:0 inComponent:0 animated:NO];  

Its a bit dirty, but dont worry, the UI rendering in iOS is very fast ;)

Answer by user4833236 for How to set a default Value of a UIPickerView


I too had this problem. But apparently there is an issue of the order of method calls. You must call:

[self.picker selectRow:2 inComponent:0 animated:YES];  

after calling

[self.view addSubview:self.picker];  

Answer by Dan Beaulieu for How to set a default Value of a UIPickerView


Swift solution:

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:

enter image description here

Answer by Rainshower Demonbreaker for How to set a default Value of a UIPickerView


For example: you populated your UIPickerView with array values, then you wanted   

to select a certain array value in the first load of pickerView like "Arizona". Note that the word "Arizona" is at index 2. This how to do it :) Enjoy coding.

NSArray *countryArray =[NSArray arrayWithObjects:@"Alabama",@"Alaska",@"Arizona",@"Arkansas", nil];  UIPickerView *countryPicker=[[UIPickerView alloc]initWithFrame:self.view.bounds];  countryPicker.delegate=self;  countryPicker.dataSource=self;  [countryPicker selectRow:2 inComponent:0 animated:YES];  [self.view addSubview:countryPicker];  


Fatal error: Call to a member function getElementsByTagName() on a non-object in D:\XAMPP INSTALLASTION\xampp\htdocs\endunpratama9i\www-stackoverflow-info-proses.php on line 71

0 comments:

Post a Comment

Popular Posts

Powered by Blogger.