This is the final workshop of the PickerView tutorial and in it you will learn how to display images and text in a single component of a PickerView control.
Initial Setup
Start by launching the PickerView application you’ve been working on. Add a third class file in the project. Provide these options for it.
Modify the AppDelegate didFinishLaunchingWithOptions: method’s code so it will display a tab for the new view.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
UIViewController *viewController3 = [[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = @[viewController1, viewController2, viewController3];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
Add code shown below in the ThirdViewController interface.h file.
#import <UIKit/UIKit.h> @interface ThirdViewController : UIViewController @property (strong, nonatomic) IBOutlet UIPickerView *pickerView; @property (nonatomic,strong) IBOutlet UILabel *itemPicked; @property (strong, nonatomic) NSDictionary *itemList; @end
Connect the pickerView and itemPicked IBOutlet properties in Interface Builder. Connect the PickerView control’s dataSource and delegate. When you are done, right-click the File’s Owner object to see connections.

Click the ThirdViewController.m file and modify the initWithNibName: method’s code to what’s shown below.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.title = @"Third View";
self.tabBarItem.image = [UIImage imageNamed:@"star"];
}
return self;
}
Next, modify the viewDidLoad method to what’s shown below.
- (void)viewDidLoad
{
[super viewDidLoad];
// Initialize the the dictionary with 7 entries (Key:Value)
self.itemList = @{"Toy Car": @"redcar_icon.png",
@"Wine Glass": @"87-wine-glass.png",
@"Small TV": @"70-tv.png",
@"Toy Jeep": @"jeep.png",
@"Dog": @"dog.png",
@"Office Phone": @"office-phone.png",
@"Flowers": @"flowers-icon.png"
};
}
Here is the PickerView’s dataSource and delegate methods to add in the ThirdViewController.m file.
| PickerView Data Source Methods | PickerView Delegate Methods |
|---|---|
#pragma mark - The PickerView dataSource methods
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return [self.itemList count];
}
|
#pragma mark - The PickerView delegate methods
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
// Place the dictionary keys and values in separate variables
NSArray *itemNames=[self.itemList allKeys];
NSArray *itemImages=[self.itemList allValues];
// Create and initialize an ImageView control
UIImage *img = [UIImage imageNamed:[itemImages objectAtIndex:row]];
UIImageView *imageView = [[UIImageView alloc] initWithImage:img];
imageView.frame = CGRectMake(0, 0, 27, 29);
// Create and initialize a Label control
UILabel *productLabel = [[UILabel alloc] initWithFrame:CGRectMake(30,0,105,30)];
productLabel.backgroundColor=[UIColor clearColor];
productLabel.text=[itemNames objectAtIndex:row];
productLabel.textColor = [UIColor blueColor];
// Create and initialize a UIView
UIView *output = [[UIView alloc] initWithFrame:CGRectMake(0,0,110,33)];
[output insertSubview:imageView atIndex:0];
[output insertSubview:productLabel atIndex:1];
return output;
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
inComponent:(NSInteger)component
{
NSArray *itemNames=[self.itemList allKeys];
// Set three properties of the itemPicked Label control
self.itemPicked.textColor = [UIColor colorWithRed:0.09 green:0.45 blue:0.44 alpha:1.00];
self.itemPicked.font=[UIFont fontWithName:@"Verdana-Bold" size:18];
self.itemPicked.textAlignment = 1;
// Display the item the user picked from the PickeView control in the Label control
self.itemPicked.text = [itemNames objectAtIndex:row];
}
|
Test The PikerView Code
Run the application to see output shown in the image below for the Third View tab.
![]() |
![]() |
| Default View | Fourth row picked |
|---|
This concludes the PickerView tutorial.


