выравнивание текста по правому краю в UIPickerView - PullRequest
8 голосов
/ 22 февраля 2009

Как правильно выровнять текст в UIPickerView? Я пытался сделать пользовательские UILabel s для представлений строк, но по какой-то причине ничего не отображается, выровнено по правому краю или нет. Вот что я написал:

- (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];
}

В случае, если кому-то интересно, я использовал CGRectZero, потому что видел это в примере UICatalog.

Ответы [ 4 ]

8 голосов
/ 06 декабря 2010

Я взял два компонента в средстве выбора и два массива, чтобы установить заголовок строк в конкретном компоненте.

Ниже кода будут отображаться данные выбора в центре со шрифтом по умолчанию и размером шрифта средства выбора. Это даст точное поведение отображения данных выбора с выравниванием по центру данных выбора.

Здесь

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

Вы должны прокомментировать ниже упоминание метода делегата UIPickerView, если вы используете метод выше ...

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

Вывод вышеприведенного примера кода будет выглядеть ниже

alt text

3 голосов
/ 26 декабря 2012

В iOS 6 теперь вы можете вернуть NSAttributedString, которая может содержать атрибуты выравнивания текста. Я разместил короткий фрагмент по другому связанному вопросу здесь: https://stackoverflow.com/a/14035356/928963

3 голосов
/ 11 марта 2009

Вы ничего не видите из-за CGRectZero. Вы должны установить размер в вашем случае.

В UICatalog, если вы говорите о том, как они использовали CGRectZero для CustomView ... хорошо, если вы посмотрите на CustomView.m, вы увидите, что они фактически игнорируют CGRectZero и задают размер кадра в initWithFrame:

0 голосов
/ 22 февраля 2009

Убедитесь, что вы:

  • Укажите явный кадр, который будет настолько высоким и широким, насколько это необходимо;
  • Установите непрозрачность отображения метки (через .opaque = YES или NO) и цвет фона соответственно (обычно требуется NO и [UIColor clearColor] соответственно).
  • Установить шрифт явно.
...