2015-04-25 4 views
5

У меня проблемы с UISegmentedControl, чтобы показать желаемый цвет оттенка.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]; 
} 

Как сделать UISegmentedControl использовать зеленый оттенок?

+0

Вы пробовали это: '[[UISegmentedControl внешний вид] setTintColor: [UIColor greenColor]];' – BoilingLime

+0

Да, печально производит тот же результат. –

+1

Не очень лучший способ сделать это, но может работать. попробуйте установить цвет для каждого подзаголовка 'UISegmentControl'? – BoilingLime

ответ

3

Попробуйте что-нибудь вроде этого?

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

Но на самом деле кажется, что это известная проблема в прошивке 7, я не знаю, если это было зафиксировано в прошивке 8.

«Вы не можете настроить стиль сегментированного элемента управления на прошивке 7 . сегментированные управления имеют только один стиль»

UIKit User Interface Catalog

+0

Решение заключалось в том, чтобы добавить цвет оттенка к двум уровням подвид (сначала это UISegment, затем есть метка и изображение). Так что спасибо за идею :) –

+0

Добро пожаловать! – BoilingLime

+0

Странно, что первое изменение внешнего вида работает, но после этого его запекли. Ну, просто создадим категорию с правильным поведением. –

6

Я в конечном итоге создать категорию желаемого поведения. Подвид структура выглядит следующим образом:

UISegment 
    UISegmentLabel 
    UIImageView 
UISegment 
    UISegmentLabel 
    UIImageView 

Так две петли необходимы для желаемого эффекта (в противном случае некоторые части остаться в старой оттенок цвета).

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

Все еще не исправлено в 2018 году ... – saeros