2015-04-25 16 views
5

Ho problemi a ottenere UISegmentedControl per mostrare il colore della tinta desiderato.UISegmentedControl tintColor

// AppDelegate 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // need red tint color in other views of the app 
    [[UIView appearance] setTintColor:[UIColor redColor]]; 
    return YES; 
} 

// ViewController 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSArray *items = @[@"Item 1", @"Item 2"]; 
    UISegmentedControl *control = [[UISegmentedControl alloc] initWithItems:items]; 
    // would like to have this control to have a green tint color 
    control.tintColor = [UIColor greenColor]; 
    [self.view addSubview:control]; 
} 

Come rendere UISegmentedControl utilizzare il colore di tinta verde?

+0

Hai provato questo: [comparsa] setTintColor [UISegmentedControl: [UIColor greenColor]] ';' – BoilingLime

+0

Sì, produce purtroppo lo stesso risultato. –

+1

Non proprio il modo migliore per farlo, ma potrebbe funzionare. prova ad impostare il colore per ogni sottoview di 'UISegmentControl'? – BoilingLime

risposta

3

Prova qualcosa del genere?

for (UIView *subView in mySegmentedControl.subviews) 
{ 
    [subView setTintColor: [UIColor greenColor]]; 
} 

Ma sembra che in realtà si tratta di un problema noto in iOS 7, non so se è stato risolto in iOS 8.

"Non è possibile personalizzare lo stile del controllo segmentato su iOS 7 . controlli segmentati hanno un solo stile"

UIKit User Interface Catalog

+0

La soluzione era quella di aggiungere il colore della tinta a due livelli di sottoview (prima c'è UISegment, quindi un'etichetta e una vista di immagini). Quindi grazie per l'idea :) –

+0

Prego! – BoilingLime

+0

Strano che la prima modifica dell'aspetto funzioni, ma dopo viene infornata. Oh bene, creerò solo una categoria con il comportamento corretto. –

6

ho finito per creare una categoria per il comportamento desiderato. Struttura visualizzazione secondaria simile a questa:

UISegment 
    UISegmentLabel 
    UIImageView 
UISegment 
    UISegmentLabel 
    UIImageView 

Così due cicli sono necessari per l'effetto desiderato (altrimenti alcune parti rimangono in vecchio colore tinta).

UISegmentedControl + TintColor.h

#import <UIKit/UIKit.h> 

@interface UISegmentedControl (TintColor) 

@end 

UISegmentedControl + TintColor.m

#import "UISegmentedControl+TintColor.h" 

@implementation UISegmentedControl (TintColor) 

- (void)setTintColor:(UIColor *)tintColor { 
    [super setTintColor:tintColor]; 
    for (UIView *subview in self.subviews) { 
     subview.tintColor = tintColor; 
     for (UIView *subsubview in subview.subviews) { 
      subsubview.tintColor = tintColor; 
     } 
    } 
} 

@end 
+0

Ancora non risolto nel 2018 ... – saeros