2009-02-22 20 views
8

Come posso allineare correttamente il testo in un UIPickerView? Ho provato a creare custom UILabel s per le visualizzazioni di riga, ma per qualche motivo, nulla viene visualizzato, allineato a destra o in altro modo. Ecco quello che ho scritto:allineare il testo a destra 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]; 
} 

Nel caso in cui qualcuno si sta chiedendo, ho usato CGRectZero perché l'ho visto nell'esempio UICatalog.

risposta

3

Il tuo non vedere nulla a causa di CGRectZero. È necessario impostare una dimensione nel tuo caso.

Nell'UICatalog, se stai parlando di come hanno usato CGRectZero per CustomView ... beh se guardi su CustomView.m vedrai che in realtà stanno trascurando CGRectZero e impostando un frame su una dimensione in initWithFrame:

0

Assicurarsi di:

  • fornire una cornice esplicita che sia il più alto e largo, se necessario;
  • Impostare l'opacità del display dell'etichetta (tramite .opaque = YES o NO) e il colore di sfondo in modo appropriato (in genere si desidera NO e [UIColor clearColor] rispettivamente).
  • Imposta il carattere in modo esplicito.
8

Ho preso due componenti nel selettore e due matrici per impostare il titolo delle righe in un particolare componente.

Sotto il codice verrà visualizzato pickerdata al centro con il carattere predefinito e il tipo di carattere del selettore. Fornirà un comportamento di visualizzazione pickerdata esatto con l'allineamento del centro del pickerdata.

Qui,

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

Si dovrebbe commentare qui sotto menzione metodo UIPickerView delegato se si utilizza sopra il metodo ...

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

L'output del codice di esempio sopra sarà simile sotto

alt text

3

In iOS 6, ora è possibile restituisce una stringa NSAttribuita, che può contenere attributi di allineamento del testo. Ho pubblicato un breve snippet su un'altra domanda correlata qui: https://stackoverflow.com/a/14035356/928963

Problemi correlati