Я очень далек от того, чтобы собрать все свои красивые кнопки и вещи в XIB, и я внезапно осознал, что люди будут платить еще 200 долларов за ноутбук более низкого качества "Потому что он розовый!"но я отвлекся.
Мне нужно каким-то образом централизованно контролировать цветовую схему моего приложения и менять цвета на лету.У меня есть пара идей, например, одноэлементный объект «Тема» с несколькими свойствами, совместимыми с kvo, которые содержат цвета и шрифты темы, затем контроллер вида «прослушивает» изменения и перерисовывает все, когда меняется тема.
Проблемы с этим до сих пор: мне нужно иметь указатель на каждый отдельный объект пользовательского интерфейса, включая такие вещи, как ячейки табличного представления - что кажется болезненным.Другой возможностью было бы создать подкласс для всех моих тематических объектов пользовательского интерфейса, возможно, заставить их зарегистрироваться в качестве наблюдателей самостоятельно, но это заставляет меня задуматься о накладных расходах, необходимых для этого, может быть, КВО - даже не тот путь, которым я здесь занимаюсь, я нене знаю.
Поэтому мне интересно, кто-нибудь мог бы поделиться тем, что они сделали в прошлом, что работает и что приводит к большим проблемам?
Спасибо!
Обновление
В итоге я выбрал одноэлементный объект SkinDispatcher, который содержит только множество свойств, которые должны соблюдаться подклассами UIView.Затем я сделал быстрые и грязные подклассы UILabel, UIButton, UITextField и всего остального, что мне довелось использовать.
Каждый из этих подклассов искал свой номер тега и использовал его для регистрации изменений в применимых шрифтах и цветах, вawakeFromNib.
Затем я создал класс специально для загрузки стиля, который, по сути, открывает файл plist, полный ключей, содержащих имена шрифтов и цвета R | G | B | A, считывает их и устанавливает их вприменимое свойство в SkinDispatcher, определяемое по имени ключа.Последний шаг (еще не опробованный) - установить наблюдателя на ключ StandardUserDefaults для скинов, который поддерживает ответчика для этой идеи.