Saturday, 6 August 2011

Custom Picker view With font size , Style and color

Hi All,

I am writing my first blog. so please tell me  if I made any mistake.

I am going to tell how to create customize picker view for font styles , size and colors. So that user can change fonts.

First  create a new view based iphone application in xcode  and  name it custom picker.

Then write code in customPicker.h file

#import <UIKit/UIKit.h>


@interface customPicker : UIViewController <UIPickerViewDelegate,UIPickerViewDataSource> {
      
      IBOutlet UILabel *label ;
      IBOutlet UIPickerView *picker;
      NSMutableArray *colorArray;
      NSMutableArray *sizeArray;
}
@property (nonatomic,retain) IBOutlet UILabel *label ;
@property (nonatomic,retain) NSMutableArray *colorArray;
@property (nonatomic,retain) NSMutableArray *sizeArray;

Then write some code in customPicker.m

#import "customPicker.h"

@implementation customPicker
@synthesize colorArray ,sizeArray ,label;

- (void)viewDidLoad   {
     [super viewDidLoad];
     // initialize  color array
     colorArray  = [[NSMutableArray alloc] initWithObjects:@"orangeColor",@"magentaColor",@"whiteColor",@"redColor",@"blueColor",@"yellowColor",@"purpleColor",@"darkGrayColor",@"lightGrayColor",@"cyanColor",@"greenColor",@"grayColor",nil];

   //initialize size array

 sizeArray  = [[NSMutableArray alloc]  initWithObjects:@"10",@"12",@"14",@"16",@"18",@"20",@"22",@"24",@"26",@"28",@"30",@"32",nil]; 

 [picker selectRow:1 inComponent:0 animated:YES];
}

Release properties

- (void)dealloc {
   [colorArray release];
   [sizeArray release];
   [label release];
   [super dealloc];
}



Now write UIPicker View delegate method.



- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView {
     return 3; //number of components in picker view
}

- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component {
    if (component == 0) {
           return [[UIFont familyNames] count]; //this is to load font family
   }
 else if(component == 1) {
         return [colorArray count]; //color array count in 2nd component 
}
else {
        return [sizeArray count]; //size array count in 3rd component
  }
}
//set the titles of components in pickerview
- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
       switch (component) {
        case 0:
                   return [[UIFont familyNames]objectAtIndex:row];
        break;
        case 1:
                   return [colorArray objectAtIndex:row];
        break;
        case 2:
                  return [sizeArray objectAtIndex:row];
         break;
}
return nil;
}
//picker view did select method
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSLog(@"%@,%@",[colorArray objectAtIndex:[picker selectedRowInComponent:1]],[[UIFont familyNames] objectAtIndex:[picker selectedRowInComponent:0]]);

NSString *font  ;
NSString *strFont;;
CGFloat testing ;

font  = [NSString stringWithFormat:@"%@",[[UIFont familyNames]objectAtIndex:[picker selectedRowInComponent:0]]];

strFont = [NSString stringWithFormat:@"%@",[sizeArray objectAtIndex:[picker selectedRowInComponent:2]]];

testing = [strFont floatValue];

NSLog(@"My Float Value is :- %f",testing);

NSString *strMyColor =[NSString stringWithFormat:@"%@",[colorArray objectAtIndex:[picker selectedRowInComponent:1]]];

//get color name from pickerview 

SEL blackSel = NSSelectorFromString(strMyColor);
UIColor* tColor = nil;
if ([UIColor respondsToSelector: blackSel])

tColor = [UIColor performSelector:blackSel];

[label setTextColor:tColor];

label.font = [UIFont fontWithName:font size:testing];
}

//And if you want to change the width of picker view 
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{
    switch (component){
             case 0
                   return 150.0f;
             case 1
                   return 110.0f;
              case 2:
                    return 40.0f;
       }
     return 0;
}

Now open customPicker.xib file and connect iboutlet with label and  picker view .

connect delegate with picker view and test the app.

Thanks..