prawy wyrównać tekst w UIPickerView


8

Jak mogę wyrównać tekst w prawo w UIPickerView? Próbowałem utworzyć niestandardowe UILabel s dla widoków wiersza, ale z jakiegoś powodu nic nie jest wyświetlane, wyrównane do prawej ani żadne inne. Oto co napisał:

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

W przypadku gdy ktoś zastanawia się, użyłem CGRectZero bo widziałem go w przykładzie UICatalog.

3

Nie widzisz niczego z powodu CGRectZero. Musisz ustawić rozmiar w swojej walizce.

W UICatalog, jeśli mówisz o tym, jak użyli CGRectZero dla CustomView ... cóż, jeśli spojrzysz na CustomView.m zobaczysz, że faktycznie ignorują CGRectZero i ustawiają ramkę na rozmiar w initWithFrame:


0

Upewnij się, że:

  • Zapewnić wyraźną ramę, która jest tak wysoki i szeroki w miarę potrzeb;
  • Ustaw nieprzezroczystość wyświetlania etykiety (za pomocą .opaque = TAK lub NIE) i odpowiednio kolor tła (zwykle chcesz mieć odpowiednio NO i [UIColor clearColor]).
  • Ustaw czcionkę jawnie.

8

Pobrałem dwa komponenty w selektorze i dwie tablice do ustawienia tytułu wierszy w danym komponencie.

Poniższy kod wyświetli pickerdata w środku z domyślną czcionką i fontsize selektora. Zapewni to dokładne zachowanie wyświetlania pickerdata z centralnym wyrównaniem danych pickerdata.

Tutaj

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

Należy komentarz poniżej wzmianka metody UIPickerView delegata jeśli używasz powyżej metody ...

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

Wyjście powyżej przykładowy kod będzie wyglądał poniżej

alt text


3

W iOS 6 można teraz zwraca NSAttributedString, który może zawierać atrybuty wyrównania tekstu. Opublikowalem krótki fragment na innym pokrewnym pytaniu tutaj: https://stackoverflow.com/a/14035356/928963