2015-04-25 15 views
5

Mam problemy z pobieraniem UISegmentedControl, aby pokazać żądany kolor tinty.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]; 
} 

Jak zrobić UISegmentedControl używać zielony odcień?

+0

Próbowałeś tego: '[[UISegmentedControl wygląd] setTintColor: [UIColor greenColor]];' – BoilingLime

+0

Tak, Niestety daje taki sam wynik. –

+1

Nie jest to najlepszy sposób na zrobienie tego, ale może działać. spróbuj ustawić kolor dla każdego subviews "UISegmentControl"? – BoilingLime

Odpowiedz

3

Spróbuj czegoś takiego?

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

Ale to rzeczywiście wydaje się, że jest to znany problem w iOS 7, ja nie wiem, czy to zostało ustalone w iOS 8.

„Nie można dostosować styl segmentowego kontrolki na iOS 7 . Segmentowe kontrole mają tylko jeden styl”

UIKit User Interface Catalog

+0

Rozwiązanie polegało na dodaniu koloru tinty do dwóch poziomów podobrazów (najpierw UISegment, potem ma etykietę i widok obrazu). Dzięki za pomysł :) –

+0

Nie ma za co! – BoilingLime

+0

Dziwne, że pierwsza zmiana wyglądu działa, ale po tym jest wypiekana. No cóż, po prostu utworzymy kategorię o prawidłowym zachowaniu. –

6

skończyło się tworząc kategorię dla pożądanego zachowania. Struktura widoków wygląda następująco:

UISegment 
    UISegmentLabel 
    UIImageView 
UISegment 
    UISegmentLabel 
    UIImageView 

Do uzyskania pożądanego efektu potrzebne są dwie pętle (w przeciwnym razie niektóre części pozostaną w starym kolorze).

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

Jeszcze nie ustalono w 2018 ... – saeros

Powiązane problemy