2009-02-22 4 views
8

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

- (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 примере.

ответ

3

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

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

0

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

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

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

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

Здесь

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

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

Смежные вопросы