Измените цвет всего приложения — для каждой нужной розетки?

#swift #storyboard #assets #uicolor

Вопрос:

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

Насколько я сейчас погуглил, я понимаю, что изменить цвет активов просто невозможно, я должен создать цвет, сохранить его в UserDefaults и загружать этот цвет каждый раз viewDidLoad .

Теперь вопрос в том, поскольку я использую storyboard для создания всех своих кнопок, переключателей и так далее, должен ли я создавать для каждого отдельного элемента outlet , чтобы изменить цвет?

Или есть лучший подход к решению этой проблемы?

Комментарии:

1. Вам не нужно иметь IBOutlet для всех ваших UIControls, вместо этого вы можете использовать UIView UIAppearance свойство s для установки различных свойств, таких как цвет фона или цвет оттенка, например UIView.appearance().backgroundColor = UIColor.red UIView.appearance().tintColor = UIColor.green , но есть загвоздка с UIAppearance

2. цитируя документы Apple, «iOS применяет изменения внешнего вида, когда представление входит в окно, оно не изменяет внешний вид представления, которое уже находится в окне. Чтобы изменить внешний вид представления, которое в данный момент находится в окне, удалите представление из иерархии представлений, а затем поместите его обратно.»

3. в принципе, когда пользователь меняет цвет, откройте контроллер представления и перезагрузите ViewController его, чтобы убедиться, что все компоненты, входящие в подкласс UIView этого VC, теперь будут отражать заданный вами цвет фона и оттенка, если вам интересно, куда поместить эти инструкции, ViewController поместите их в ViewDidLoad

4. Спасибо вам за информацию. К сожалению, это не работает для меня. Я попробовал настройки цвета фона и оттенка, но затем, конечно, все цвета фона и оттенки изменились. На некоторых кнопках мне нужно изменить фон, на некоторых кнопках мне нужно изменить оттенок…

5. Вам нужно изменить цвет для всего экземпляра какого-либо определенного класса кнопок ? Если да, вы можете добавить свое пользовательское свойство UIAppearance таким образом, когда вы зададите свойство, только экземпляр этого конкретного класса будет иметь свой цвет, отраженный в других экземплярах, не будет