I have a question about something I've been working on for a while. I have a UIPickerView that lists different types of food. My array looks like such:
food = [[NSMutableArray alloc] init];
[activities addObject:#"Pasta"];
[activities addObject:#"Pizza"];
[activities addObject:#"Spaghetti"];
[activities addObject:#"Salad"];
And my image array is:
foodImages = [[NSMutableArray alloc] init];
[activities addObject:#"Pasta.png"];
[activities addObject:#"Pizza.png"];
[activities addObject:#"Spaghetti.png"];
[activities addObject:#"Salad.png"];
What I am trying to find out is if when the user selects an item from the picker view if I can change the image of a button. So if pasta is selected from the UIPickerView it would change the image of the button to "Pasta.png". How could I go about achieving this in Xcode?
You can certainly do that. First of all though, it would be much better to store the image links and the food name in one array. This will make your app more scalable and changes to the code are less likely to cause errors.
You could do this like so:
food = [[NSMutableArray alloc] init];
[food insertObject:[NSMutableArray arrayWithObjects:#"Pasta",#"Pasta.png",nil] atIndex:[food count]];
[food insertObject:[NSMutableArray arrayWithObjects:#"Pizza",#"Pizza.png",nil] atIndex:[food count]];
Though if your images are the same as your names but with .png extension then do you really need two objects?
As for setting the images for a UIPicker you would do something like this (You need to add UIPickerViewDelegate to the .h and call [self setPickerValue]; where ever you want to show your UIPicker - perhaps a button or text field?):
-(void)setPickerValue {
pickerActionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil, nil];
[pickerActionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
CGRect pickerFrame = CGRectMake(0, 44, 0, 0);
UIPickerView *valuesPicker = [[UIPickerView alloc] initWithFrame:pickerFrame];
[valuesPicker setDataSource: self];
[valuesPicker setDelegate: self];
valuesPicker.showsSelectionIndicator = YES;
[pickerActionSheet addSubview:valuesPicker];
UIToolbar *controlToolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
[controlToolBar setBarStyle:UIBarStyleBlack];
[controlToolBar sizeToFit];
UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *setButton = [[UIBarButtonItem alloc] initWithTitle:#"Set" style:UIBarButtonItemStyleDone target:self action:#selector(dismissPicker)];
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:#"Cancel" style:UIBarButtonItemStyleBordered target:self action:#selector(cancelPicker)];
[controlToolBar setItems:[NSArray arrayWithObjects:cancelButton, spacer, setButton, nil] animated:NO];
[pickerActionSheet addSubview:controlToolBar];
[pickerActionSheet showInView:self.view];
[pickerActionSheet setBounds:CGRectMake(0, 0, 320, 485)];
}
-(void)cancelPicker {
[pickerActionSheet dismissWithClickedButtonIndex:0 animated:YES];
}
// Number of components.
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return 1;
}
// Total rows in our component.
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
return [food count];
}
// Display each row's data.
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
return [[food objectAtIndex: row] objectAtIndex:0];
}
The above code makes a nice picker view with a cancel and ok button as a toolbar. The final function you need is (presuming you have a UIButton named "button1"):
-(void)dismissPicker {
[button1 setImage:[UIImage imageNamed: [[food objectAtIndex:row] objectAtIndex:1]] forState:UIControlStateNormal];
[pickerActionSheet dismissWithClickedButtonIndex:0 animated:YES];
}
[yourButton setImage:[UIImage imageNamed:[foodImages objectAtIndex:0]] forState:UIControlStateNormal]; // objectAtIndex 0 will return "Pasta.PNG", 1 will return Pizza, etc.
Implement the UIPickerViewDelegate method (docs):
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSString *imageName = foodImages[row];
[button setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
}
Set your picker's delegate:
pickerView.delegate = self;
Then add your images to your Xcode project (if you haven't done so already).
You may also want to set the image for different states, or use setBackgroundImage:forState if you also want text on the button (see UIButton docs for more info).
I'd use a NSDictionary with the food's name being the Key and the food's picture file being the value. Then when it is selected, just load the Key's value as the picture.
If you want to stick with two arrays, then get the index of the selected food and as long as your foodImages array mirrors the food array, you can use that value for the objectAtIndex to load the image.
Related
UIDatePicker *datePicker = [[UIDatePicker alloc]init];
[datePicker setDate:[NSDate date]];
[datePicker addTarget:self action:#selector(updateTextField:) forControlEvents:UIControlEventValueChanged];
[txt_time setInputView:datePicker];
UIBarButtonItem *barButton=[[UIBarButtonItem alloc]initWithTitle:#"Done" style:UIBarButtonItemStyleBordered target:self action:#selector(addORDeleteRows)];
How to add done button on top of the uidatepicker when I press on textfield then uidatepicker will show after entering the date done button also show. After clicking on done button uidatepicker should be hidden.
Alloc a view add datepicker at bottom to the view and toolbar on the top of datepicker to the view.
Add barbuttons to the toolbar.
//First declare all the property and set the delegate and datasource in .h like this
#interface RegistrationView : UIViewController <UIPickerViewDataSource,UIPickerViewDelegate,UIActionSheetDelegate>
{
UIPickerView *picker;
UIToolbar *toolbarPicker;
UIActionSheet *actionPicker;
}
#property (strong,nonatomic) UIPickerView *picker;
#property (strong,nonatomic) UIToolbar *toolbarPicker;
#property (strong,nonatomic) UIActionSheet *actionPicker;
//and synthesis in .m file
#synthesize picker,actionPicker,toolbarPicker;
// in View did load method put call the setting method for picker
[self pickerSetting];
// set picker,action sheet and toolbar through This method
-(void) pickerSetting
{
toolbarPicker = [[UIToolbar alloc] initWithFrame:CGRectMake(0,0,self.view.bounds.size.width,44)];
if (!g_IS_IOS_6)
{
toolbarPicker.barTintColor = [UIColor colorWithRed:72.0/255.0 green:197.0/255.0 blue:87.0/255.0 alpha:1.0];
}
toolbarPicker.frame=CGRectMake(0,0,320,44);
actionPicker = [[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
actionPicker.frame = CGRectMake(0, 234, 320, 256);
[actionPicker setActionSheetStyle:UIActionSheetStyleDefault];
actionPicker.delegate = self;
UIImage *imgbtnConvert = [UIImage imageNamed:#"info_button.png"];//Done btn.png
UIButton *btnConvert = [UIButton buttonWithType:UIButtonTypeCustom];
btnConvert.bounds = CGRectMake(200, 0, 93,31);
[btnConvert setTitle:#"Done" forState:UIControlStateNormal];
[btnConvert setTintColor:[UIColor whiteColor]];
[btnConvert setBackgroundImage:imgbtnConvert forState:UIControlStateNormal];
[btnConvert addTarget:self action:#selector(pickerDoneClick) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barButtonItemConvert = [[UIBarButtonItem alloc] initWithCustomView:btnConvert];
UIBarButtonItem *flexConvert = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIImage *imageConvert = [UIImage imageNamed:#"info_button.png"];//cancel png
UIButton *buttonConvert = [UIButton buttonWithType:UIButtonTypeCustom];
buttonConvert.bounds = CGRectMake( 0, 0, 93,31);
[buttonConvert setTitle:#"Cancel" forState:UIControlStateNormal]; //set title
[buttonConvert setTintColor:[UIColor whiteColor]]; //font color
[buttonConvert setBackgroundImage:imageConvert forState:UIControlStateNormal]; //set background image
[buttonConvert addTarget:self action:#selector(pickerCancelClick) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barCancelButtonItemConvert = [[UIBarButtonItem alloc] initWithCustomView:buttonConvert];
NSArray *itemsConvert = [[NSArray alloc] initWithObjects:barCancelButtonItemConvert, flexConvert, barButtonItemConvert, nil];
[toolbarPicker setItems:itemsConvert];
[actionPicker addSubview:toolbarPicker];
picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 44, 320, 216)];
picker.delegate = self;
picker.dataSource = self;
picker.showsSelectionIndicator = YES;
picker.backgroundColor= [UIColor whiteColor];
[actionPicker addSubview:picker];
}
// and add two mehtod for picker done button and cancel button click .
-(void) pickerDoneClick
{
// picker done button click put here your code ..
[actionPickerSearchCar dismissWithClickedButtonIndex:0 animated:YES];
}
-(void) pickerCancelClick {
// Cancel button click
[actionPickerSearchCar dismissWithClickedButtonIndex:0 animated:YES];
}
// and put the delegate and data source method
#pragma mark -
#pragma mark UIPickerView Delegate Datasource Method
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
// return yourarr.count;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
// return yourarr[row];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
// selectedfiles =yourarr[row];
}
// call this method for allocation picker .
[self pickerSetting]
// and show picker using this (put This in button action method)
-(IBAction)showPicker:(id)sender
{
[actionPickerSearchCar showInView:self.view];
[actionPickerSearchCar setBounds:CGRectMake(0, 0, 320, 465)];
}
I hope , it's helpful for you . Thank you.
I think you might really want to use the inputAccessoryView property of UITextField. Just put an UIToolbar there with your UIBarButtonItem and use the target action to call [txt_time resignFirstResponder].
I did when I click when textField ,Open UIPickerView and then select PickerView Data it's display on UITextField.
But now i Have 3 text_Filed(city,typeofcars,branches) but I don't know about three TextFileds on Single UIPickerView. So Please give me any idea .
single text-Filed one UIPickerview code is:-
Businessname=[[UITextField alloc]init];
Businessname.frame=CGRectMake(0, 0, 221, 33);
Businessname.placeholder=#"Business Name";
[Businessname setFont:[UIFont fontWithName:#"Times New Roman" size:13]];
Businessname.backgroundColor=[UIColor whiteColor];
[Businessname setBorderStyle:UITextBorderStyleBezel];
Businessname.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
Businessname.layer.borderColor=[[UIColor yellowColor]CGColor];
Businessname.layer.borderWidth= 2.0f;
Businessname.textColor=[UIColor blackColor];
[scrol addSubview:Businessname];
yourpicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 400, 100, 150)];
[yourpicker setDataSource: self];
[yourpicker setDelegate: self];
yourpicker.showsSelectionIndicator = YES;
Businessname.inputView = yourpicker;
[yourpicker setShowsSelectionIndicator:YES];
mypickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 300, 100, 56)];
mypickerToolbar.barStyle = UIBarStyleBlackOpaque;
[mypickerToolbar sizeToFit];
NSMutableArray *barItems = [[NSMutableArray alloc] init];
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
[barItems addObject:flexSpace];
UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:#selector(pickerDoneClicked)];
[barItems addObject:doneBtn];
[mypickerToolbar setItems:barItems animated:YES];
Businessname.inputAccessoryView = mypickerToolbar;
-(void)pickerDoneClicked
{
NSLog(#"Done Clicked");
[Businessname resignFirstResponder];
mypickerToolbar.hidden=YES;
yourpicker.hidden=YES;
}
- (NSInteger)numberOfComponentsInPickerView:
(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
return [pickarray count];
}
Above code is output is when I click text-filed and then open UIPIckerView and then choose the data. But now I have three TextFields and 3 NSArrays on Please how to pass data data to UIPickerView based on UITextField.
So please give me any idea about my problem
Thanks in Advanced
You can do this by setting tag value for each textfield. Also set delegate of UITextField for each textfield.
In delegate method of UITextField
- (void)textFieldDidBeginEditing:(UITextField *)textField
recongnize textfield by it's tag value.
Based on tag value do something like
// Assumed taht 100, 101, 102 is the tag values for textfield's
NSInteger tag = textField.tag;
switch(tag)
{
case 100:
pickarray = #[#"1",#"2",#"3",#"4"];
break;
case 101:
pickarray = #[#"10",#"20",#"30",#"40"];
break;
case 102:
pickarray = #[#"11",#"21",#"31",#"41"];
break;
default:
break;
}
by this you can assign different values to "pickarray" according to selected textfield and reload your UIPickerView.
I am trying to dismiss a UIPickerView using a toolbar similar to the inputAccessoryView on keyboards.
I am using the same UIToolbar for both my text field and my picker, the textfield will dismiss properly, but the picker doesn't even recognize my touch on the button.
This is the code I am using to create the toolbar:
UIToolbar *tipToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
tipToolbar.barStyle = UIBarStyleDefault;
UIBarButtonItem *donebtn = [[UIBarButtonItem alloc] initWithTitle:#"Done" style:UIBarButtonItemStyleDone target:self action:#selector(resignResponder:)];
tipToolbar.items = [NSArray arrayWithObjects:
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
donebtn, nil
];
[tipToolbar sizeToFit];
_outlet_txt_ipaddr.inputAccessoryView = tipToolbar;
[_outlet_picker addSubview:tipToolbar];
And this is the action that will dismiss the keyboard or the picker:
- (IBAction)resignResponder:(id)sender{
[_outlet_txt_ipaddr resignFirstResponder];
[_outlet_picker resignFirstResponder];
}
The toolbar appears on the picker view, but my tap on the done button isn't even showing the animation let alone call the resignResonder action.
for picker view [_outlet_picker resignFirstResponder]; will not work.
you need to implement the delegate for picker view.
try this code
UIToolbar *tipToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
tipToolbar.barStyle = UIBarStyleDefault;
UIBarButtonItem *donebtn = [[UIBarButtonItem alloc] initWithTitle:#"Done" style:UIBarButtonItemStyleDone target:self action:#selector(resignResponder:)];
tipToolbar.items = [NSArray arrayWithObjects:
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
donebtn, nil
];
[tipToolbar sizeToFit];
_outlet_txt_ipaddr.inputAccessoryView = tipToolbar;
_outlet_picker.delegate=self;
_outlet_picker.dataSource=self;
_outlet_picker.showsSelectionIndicator=YES;
[self.view addSubview:outlet_picker];
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
{
return [pickerValueAry count];
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
{
NSMutableArray *ary = [[NSMutableArray alloc] initWithArray:pickerValueAry];
id str=[ary objectAtIndex:row];
return str;
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
NSLog(#"selectedRowInPicker >> %d",row);
}
you can dismiss the picker view on row select.
I have a problem with UIPickerView. Following a tutorial on YT I created a UIPickerView in a popover after tapping on a textfield.
Everything looks fine, but the UIPickerView acts kind of strange. If I just tap on a row i want to select, it rolls up/down normally to this specific row and makes a selection. But if I try to scroll with my finger it doesn't roll as smooth as it should with a momentum and it doesn't snap on any of the rows. It also doesn't make a selection, but it makes a sound like it does. Worst of all, the picker doesn't seem to care about the number of rows and I can roll up and down as far as I want, although there are no selectable rows anymore.
Here is my code.
decayStatesArray contains four simple String-objects. The UITextfield und the activeDecayString are used in the "donePressed"-methode.
The main function:
-(void)showPicker:(UITextField *)textField {
activeTextfield = textField;
//for the default sizes of a UIPickerView
decayStatePicker = [[UIPickerView alloc] init];
UIViewController *popOverContent = [[UIViewController alloc] init];
UIView *popOverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [decayStatePicker frame].size.width, [decayStatePicker frame].size.height+44)];
decayStatePicker = [[UIPickerView alloc] initWithFrame:CGRectMake([popOverView frame].origin.x, [popOverView frame].origin.y + 44, 0, 0)];
pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake([popOverView frame].origin.x, [popOverView frame].origin.y, [popOverView frame].size.width, 44)];
[decayStatePicker setDataSource:self];
[decayStatePicker setDelegate:self];
[decayStatePicker setShowsSelectionIndicator:YES];
[decayStatePicker selectRow:0 inComponent:0 animated:YES];
//Create Toolbar
[pickerToolbar setBarStyle:UIBarStyleBlackTranslucent];
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:#"Done" style:UIBarButtonItemStyleBordered target:self action:#selector(donePressed)];
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:#"Cancel" style:UIBarButtonItemStyleBordered target:self action:#selector(cancelPressed)];
[pickerToolbar setItems:[NSArray arrayWithObjects:flexibleSpace, doneButton, cancelButton, nil]];
[popOverView addSubview:decayStatePicker];
[popOverView addSubview:pickerToolbar];
[popOverContent setView:popOverView];
pickerPopoverController = [[UIPopoverController alloc] initWithContentViewController:popOverContent];
pickerPopoverController.popoverContentSize = CGSizeMake([popOverView frame].size.width, [popOverView frame].size.height);
[pickerPopoverController presentPopoverFromRect:[textField frame] inView:[self view] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
The delegate methodes:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: (NSInteger)component {
return [decayStatesArray count];
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [decayStatesArray objectAtIndex:row];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
if ([pickerView isEqual:decayStatePicker]) {
NSLog(#"The Picker is: %#", pickerView);
NSLog(#"The item is: %#", [decayStatesArray objectAtIndex:row]);
}
activeDecayString = [decayStatesArray objectAtIndex:row];
}
In my app, when button is pressed, I am launching UIActionSheet with UIPickerView and UIToolBar in it. Its working perfectly by using the following code. I am trying to get the picker value and set that value to the called button, but I couldn't find the exact solution for it.
- (IBAction)showPicker:(id)sender {
actionSheet = [[UIActionSheet alloc] initWithTitle:nil
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];//as we want to display a subview we won't be using the default buttons but rather we're need to create a toolbar to display the buttons on
[actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
CGRect pickerFrame = CGRectMake(0, 40, 0, 0);
pickerView = [[UIPickerView alloc] initWithFrame:pickerFrame];
pickerView.showsSelectionIndicator = YES;
pickerView.dataSource = self;
pickerView.delegate = self;
[actionSheet addSubview:pickerView];
//[pickerView release];
pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
pickerToolbar.barStyle = UIBarStyleBlackOpaque;
[pickerToolbar sizeToFit];
NSMutableArray *barItems = [[NSMutableArray alloc] init];
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
[barItems addObject:flexSpace];
UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:#selector(doneButtonPressed:)];
[barItems addObject:doneBtn];
UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:#selector(cancelButtonPressed:)];
[barItems addObject:cancelBtn];
[pickerToolbar setItems:barItems animated:YES];
[actionSheet addSubview:pickerToolbar];
[actionSheet addSubview:pickerView];
[actionSheet showInView:self.view];
[actionSheet setBounds:CGRectMake(0, 0, 320, 485)];
}
When Done button in Tool bar pressed it will call this method
-(void)doneButtonPressed:(id)sender{
//Do something here here with the value selected using [pickerView date] to get that value
[actionSheet dismissWithClickedButtonIndex:1 animated:YES];
[pickerView release];
[pickerToolbar release];
[actionSheet release];
}
Here is my questions
How to get The picker value from action sheet?
How to set that value to the button?
Thanks for your help guys
Assuming the pickerView datasource has only one component you can get the selected row using:
NSInteger row = [pickerView selectedRowInComponent:0];
Just create one ivar in your .h or .m and assign the [pickerView date] to the ivar and you are done with getting the value from ActionSheet.
Happy Coding :)
EDIT
in your -(void)doneButtonPressed:(id)sender method just put this line of code
selected = [pickerView date];
And selected is the NSDate type ivar declared in .h as below
#property (strong, nonatomic) NSDate *selected;
And have to declare one property for datePicker also
#property (strong, nonatomic) UIDatePicker *pickerView;
And in .m synthesize it as below
#synthesize pickerView;
#synthesize selected;
Happy Coding :)
Edit 1
For custom pickerView
(I assume that all the delegate and datasources for pickerView is defined and declared)
to get selected value from custom picker have to use the below mentioned code
NSInteger row = [singlePicker selectedRowInComponent:0];
NSString *selected = [pickerData objectAtIndex:row];
singlePicker = pickerView and pickerData is NSArray which is used as datasource for pickerView
May this will help you to solve your problem.
Happy Coding :)