2013-09-23 2 views
60

Как мы можем изменить глобальный цвет оттенка на iOS7/iOS8 по коду? Я хочу изменить несколько объектов, которые используют это свойство, но не изменять их, поэтому я хочу использовать глобальное свойство tint.Изменить общий цвет оттенков - iOS7/iOS8

+1

Я знаю, что вы указали «по коду», st плохо, я думаю, что важно упомянуть, что в инспекторе файлов раскадровки есть глобальное свойство оттенка. –

ответ

98

Просто измените tintColor в делегате приложения, он автоматически передается по умолчанию всем своим UIView потомкам.

[self.window setTintColor:[UIColor greenColor]]; 
+0

Вы правы, довольно просто добавьте _window.tintColor = [UIColor purpleColor]; (autosynthesize) Но могу ли я изменить его из другого представления? – elGeekalpha

+0

Он реализован на любом 'UIView', поэтому вы можете установить его на любом представлении в своей иерархии представлений, и все его потомки наследуют один и тот же default' tintColor' (если вы не указали иначе) – Vinzzz

+1

ВАЖНО: не забудьте проверить селектор для совместимости с ios6: \t 'if ([window отвечаетToSelector: @selector (setTintColor :)))' – Martin

62

[[UIView appearance] setTintColor:[UIColor greenColor]];

+3

Если вам нужно направить кнопки UIAlertView, а не только главное окно приложения, это лучший ответ! – d60402

+6

Это должен быть принятый ответ :) – kreek

+3

'tintColor' UIView' не имеет аннотации 'UI_APPEARANCE_SELECTOR'. Этот ответ неверен. – Tobol

12

Вы можете задать оттенок цвета для всего приложения, установив свойство оттенок окна. Для этого вы можете использовать код, похожий на следующий:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window.tintColor = [UIColor purpleColor]; 
    return YES; 
} 
28

Есть два способа изменить цвет глобального оттенка. Как упоминалось выше, вы можете изменить self.window.tintColor в -application:didFinishLaunchingWithOptions:.

Более изящный способ, на мой взгляд, установить Global Оттенок в File Inspector в раскадровку, пока ничего не выбрано. Таким образом, ваш -application:didFinishLaunchingWithOptions: чище.

Global Tint in File Inspector

+0

любые пользовательские xibs каким-то образом не влияют на свойство 'tintColor'' UIWindow' или глобальный оттенок, как вы предлагаете. – tGilani

+0

не уверен, почему смена варианта раскадровки не сработала, но 'self.window? .tintColor = UIColor (netHex: 0xc0392b)' сделал. –

+0

Было бы замечательно, если бы Xcode был функциональным. Вероятно, это будет работать на Xcode release 345. Сегодня, как и ожидалось, Xcode дерьмо на моей голове и ничего не делает. Я хочу, чтобы Apple в ближайшее время выпустила сатану с позиции руководителя инструментов разработчика. – SpaceDog

2

Обновление для Swift 2.2

Вы можете сделать это из любой точки мира, как это:

// Get app delegate 
let sharedApp = UIApplication.sharedApplication() 

// Set tint color 
sharedApp.delegate?.window??.tintColor = UIColor.green() 

Или, если вы пытаетесь сделать это с AppDelegate,

//self.window?.tintColor = UIColor.green() 
Смежные вопросы