2009-02-22 1 views
8

Wie kann ich Text in einem UIPickerView rechts ausrichten? Ich habe versucht, benutzerdefinierte UILabel s für die Zeilenansichten zu machen, aber aus irgendeinem Grund wird nichts angezeigt, rechtsbündig oder sonstwie. Hier ist, was ich schrieb:rechts ausrichten Text in 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]; 
} 

Falls jemand fragen wird, habe ich CGRectZero, weil ich es im Beispiel UICatalog sah.

Antwort

3

Sie sehen nichts wegen CGRectZero. Sie müssen in Ihrem Fall eine Größe festlegen. Wenn Sie im UICatalog darüber sprechen, wie sie CGRectZero für CustomView verwendet haben, sehen Sie, wenn Sie CustomView.m betrachten, dass sie CGRectZero ignorieren und einen Rahmen auf eine Größe im initWithFrame setzen:

0

Stellen Sie sicher:

  • einen expliziten Rahmen bereitzustellen, die so hoch und breit wie nötig ist;
  • Legen Sie die Display-Opazität (über .opaque = YES oder NO) und die Hintergrundfarbe entsprechend fest (normalerweise möchten Sie NO und [UIColor clearColor]).
  • Legen Sie die Schriftart explizit fest.
8

Ich habe zwei Komponenten in Picker und zwei Arrays genommen, um den Titel der Zeilen in einer bestimmten Komponente festzulegen.

Im folgenden Code werden die Pickerdaten in der Mitte mit Standardschriftart und Schriftgröße des Pickers angezeigt. Es wird ein genaues Pickerdata-Anzeigeverhalten mit zentrierter Ausrichtung der Pickerdaten ergeben.

Hier

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

Sie unter Erwähnung UIPickerView Delegatmethode kommentieren sollten, wenn Sie oben Methode verwenden ...

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

Der Ausgang des obigen Codebeispiel aussehen wie unten

alt text

3

In iOS 6 können Sie jetzt Gibt einen NSAttributedString zurück, der Textausrichtungsattribute enthalten kann. Ich habe hier ein kurzes Snippet zu einer anderen verwandten Frage gepostet: https://stackoverflow.com/a/14035356/928963