Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

right align text in UIPickerView

How can I right align text in a UIPickerView? I tried to make custom UILabels for the row views, but for some reason, nothing is showing up, right-aligned or otherwise. Here's what I wrote:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
    [label setText:[NSString stringWithFormat:@"row %d", row]];
    [label setTextAlignment:UITextAlignmentRight];
    return [label autorelease];
}

In case anyone is wondering, I used CGRectZero because I saw it in the UICatalog example.

like image 689
Sophie Alpert Avatar asked Feb 22 '09 02:02

Sophie Alpert


1 Answers

I have taken two components in picker and two arrays to set the title of the rows in a particular component.

Below code will display pickerdata in center with default font and fontsize of the picker. It will give exact pickerdata display behavior with center alignment of the pickerdata.

Here,

NSArray *component1Array=[NSArray arrayWithObjects:@"0 lbs",@"1 lbs",@"2 lbs",@"3 lbs",@"4 lbs",@"5 lbs",nil];

NSArray *component2Array=[NSArray arrayWithObjects:@"0.00 oz",@"0.25 oz",@"0.50 oz",@"0.75 oz",@"1.00 oz",nil];

     - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
        {
             //I have taken two components thats why I have set frame of my "label" accordingly. you can set the frame of the label depends on number of components you have... 

             UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 145, 45)];

             //For right alignment of text,You can set the UITextAlignmentRight of the label.  
             //No need to set alignment to UITextAlignmentLeft because it is defaulted to picker data display behavior.

             [label setTextAlignment:UITextAlignmentCenter];
             label.opaque=NO;
             label.backgroundColor=[UIColor clearColor];
             label.textColor = [UIColor blackColor];
             UIFont *font = [UIFont boldSystemFontOfSize:20];
             label.font = font;
             if(component == 0)
             {
                 [label setText:[NSString stringWithFormat:@"%@",[component1Array objectAtIndex:row]]];
             }
             else if(component == 1)
             {
                 [label setText:[NSString stringWithFormat:@"%@", [component2Array objectAtIndex:row]]];
             }
             return [label autorelease];
        }

You should comment below mention UIPickerView delegate method if you are using above method...

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

The output of above sample code will look like below

alt text

like image 121
Vipul Parmar Avatar answered Nov 05 '22 12:11

Vipul Parmar