Изменить глобальный оттенок для каждой цели

Я пишу приложение с несколькими целями и хочу изменить цвет оттенка по умолчанию для каждой цели отдельно. У меня есть файл, содержащий константы для каждой цели, включая определение цвета оттенка kTintColor.

Вот что я пытался сделать:

self.window?.tintColor = kTintColor
UIView.appearance().tintColor = kTintColor

Цвет оттенка меняется так, как я хочу, но это вызывает другую проблему:
В некоторых моих представлениях мне нужно изменить оттенок одного UIBarButtonItem, в то время как другие сохраняют глобальный оттенок. Это достигается вызовом self.barBtnX.tintColor = ...
Если я использую глобальный оттенок цвета, установленный в моем файле раскадровки, это работает, как и ожидалось. Однако после изменения цвета оттенка в моем AppDelegate он перестает работать.

Есть ли другой способ сделать это?

EDIT:
Я могу изменить глобальный цвет оттенка для каждой цели, но после этого я больше не могу изменить цвет оттенка одного UIBarButtonItem. Я хочу знать, есть ли способ достичь обоих.


person cLar    schedule 08.10.2015    source источник


Ответы (2)


Во-первых, вы можете создать словарь, в котором каждая пара ключ/значение будет целевым именем/значением цвета оттенка.

var TintColorDictionary:NSDictionary = [
    "target_name_1": "tint_color_1",
    "target_name_2": "tint_color_2",
              "...": "..."
];

Затем посмотрите здесь: Как получить целевое имя в iOS.

Затем просто введите имя цели и получите цвет оттенка!

Удачи!

person Adam Suskin    schedule 08.10.2015
comment
Может быть, я недостаточно ясно выразился. Я могу изменить глобальный оттенок для каждой цели по назначению. Моя проблема в том, что после того, как я его поменяю, я больше не могу изменить оттенок для одного UIBarButtonItem. Я отредактирую свой вопрос и постараюсь сделать его более понятным. - person cLar; 13.10.2015

Я нашел решение своей проблемы. Вот пошаговое руководство:

TLDR:
Не меняйте цвет оттенка, измените режим рендеринга изображения.

Определить цвета оттенка
Добавьте файл с именем Constants-TargetName.swift для каждой цели и добавьте его в настройки сборки соответствующей цели. Внутри этого файла находится определение глобального оттенка цвета (и другие глобальные константы для этой цели, если это необходимо).
let kTintColor = UIColor(red: 0.0, green: 0.0, blue: 170.0/255.0, alpha: 1.0)

Установить глобальный цвет оттенка
Измените глобальный цвет оттенка в AppDelegate.swift внутри application(didFinishLaunchingWithOptions):
UIView.appearance().tintColor = kTintColor

Изменить цвет UIBarButtonItem
Настройте изображение так, чтобы оно имело цвет, на который вы хотите его изменить. В моем случае у меня синий глобальный оттенок, а изображения серые. Таким образом, приведенный ниже код переключает цвета между серым и синим. Вместо изменения цвета оттенка для одного UIBarButtonItem измените его изображение:

if globalTintColor {
  self.btn.image = UIImage(named: "ImgName")?.imageWithRenderingMode(.AlwaysTemplate)
} else {
  self.btn.image = UIImage(named: "ImgName")?.imageWithRenderingMode(.AlwaysOriginal)
}
person cLar    schedule 13.10.2015