2013-08-27 12 views
8

Così ho provato a modificare l'attributo text del titolo del mio UISegmentedControl, ma non funziona, non cambia nulla. Ho anche applicato uno sfondo e un divisore personalizzati e funziona correttamente, ma non questo.UISegmentedControl setTitleTextAttributes non funziona

NSDictionary *normaltextAttr = 
      @{[UIColor blackColor]: UITextAttributeTextColor, 
       [UIColor clearColor]: UITextAttributeTextShadowColor, 
       [UIFont fontWithName:_regularFont size:20.f]: UITextAttributeFont}; 


NSDictionary *selectedtextAttr = 
      @{[UIColor colorWithRed:135.0/255.0 green:135.0/255.0 blue:135.0/255.0 alpha:1.0]: UITextAttributeTextColor, 
       [UIColor clearColor]: UITextAttributeTextShadowColor, 
       [NSValue valueWithUIOffset:UIOffsetMake(0, 1)]: UITextAttributeTextShadowOffset, 
       [UIFont fontWithName:_regularFont size:0.0]: UITextAttributeFont}; 

[[UISegmentedControl appearance] setTitleTextAttributes:normaltextAttr 
               forState:UIControlStateNormal]; 
[[UISegmentedControl appearance] setTitleTextAttributes:selectedtextAttr 
               forState:UIControlStateSelected]; 

risposta

11

Si è utilizzato l'ordine errato di chiavi e valori, quindi non funziona.

Try This

[[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
                 [UIColor blackColor],UITextAttributeTextColor, 
                 [UIColor clearColor], UITextAttributeTextShadowColor, 
                 [UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0], UITextAttributeFont, nil] forState:UIControlStateNormal]; 

[[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
                 [UIColor colorWithRed:135.0/255.0 green:135.0/255.0 blue:135.0/255.0 alpha:1.0],UITextAttributeTextColor, 
                 [UIColor clearColor], UITextAttributeTextShadowColor, 
                 [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset, 
                 [UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0], UITextAttributeFont, nil] forState:UIControlStateSelected]; 
+0

funziona! quindi questo metodo non ama il dizionario letterale? – harinsa

+1

I letterali dei dizionari funzionano bene; se non lo facessero, ci sarebbe un bug serio in iOS! '[self setTitleTextAttributes: @ {UITextAttributeTextColor: [UIColor redColor]} forState: UIControlStateNormal];' – NathanAldenSr

+1

Sarebbe bello se le risposte indichino ciò che è sbagliato invece di pubblicare semplicemente qualcosa che funzioni. –

10

Attenzione alla differenza nel modo in cui si ordina le coppie tra il metodo factory (valore/chiave)

[NSDictionary dictionaryWithObjectsAndKeys: value, key, nil] 

e la dichiarazione letterale (chiave/valore)

@{key: value} 

È sufficiente utilizzare l'ordine errato di chiave e valore.

Ciò funzionerà:

NSDictionary *normaltextAttr = 
     @{UITextAttributeTextColor : [UIColor blackColor], 
     UITextAttributeTextShadowColor : [UIColor clearColor], 
     UITextAttributeFont : [UIFont fontWithName:_regularFont size:20.f]}; 


[[UISegmentedControl appearance] setTitleTextAttributes:normaltextAttr forState:UIControlStateNormal]; 
+0

Questa dovrebbe essere accettata risposta – Renetik

6

Nota che, dal momento iOS 7 Alcune di queste chiavi sono stati ora deprecato. Ora dovrai usare qualcosa del tipo:

[[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
                 [UIColor blackColor], NSForegroundColorAttributeName, 
                 [UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0], NSFontAttributeName, nil] forState:UIControlStateNormal]; 

[[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
                 [UIColor colorWithRed: 135.0/255.0 green: 135.0/255.0 blue: 135.0/255.0 alpha: 1.0],NSForegroundColorAttributeName, 
                 [UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0], NSFontAttributeName, nil] forState:UIControlStateSelected]; 
Problemi correlati