#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
таким образом, когда вы зададите свойство, только экземпляр этого конкретного класса будет иметь свой цвет, отраженный в других экземплярах, не будет