2017-01-24 1 views
2

Я создаю приложение iOS со Свифт. На каждой странице приложения есть текстовые ярлыки для разных целей. Например, текстовые метки для заголовков, текстовые метки для описания. И нам нужно унифицировать внешний вид текстов для каждой категории целей.iOS: Как эффективно унифицировать семейство шрифтов и размеры на разных страницах приложения?

Я могу объединить их внешний вид в построителе интерфейса, скажем для всех текстовых заголовков, установить семейство шрифтов на «Helvetica Nueue» и размер шрифта до «15». Однако, когда наш дизайнер изменил семейство и размеры шрифтов, мы должны вручную изменить каждую из этих настроек ярлыков, что очень неэффективно.

Прямой подход к решению этого вопроса: определить семейство шрифтов и размер как константы в классе утилиты, а затем в коде позади установить весь текстовый стиль после загрузки страницы приложения. В этом случае, когда есть какие-либо изменения, нам нужно только обновить константы в классе утилиты. Однако для этого требуется добавить ссылки на каждую текстовую метку в нашем коде позади от разработчика интерфейса, что также требует большой работы, и это недостаточно эффективно.

Любые лучшие идеи, чтобы сделать это ловко и эффективно? Цените свои предложения!

+0

Очень хороший вопрос! –

ответ

1

Вот идея:

  • Определить набор UIViewtag значений для каждой отдельной этикетки/TextField/TextView/... стиль.
  • Затем в Interface Builder установите метки/текстовые поля/текстовые поля/... в приблизительный стиль, чтобы вы хорошо поняли, как все будет выглядеть и размер. Но также установите значение tag, соответствующее соответствующему стилю, как определено.
  • Сядьте с дизайнером, чтобы определить гранулярность будущего доказательства. Я имею в виду, что два ярлыка могут иметь тот же стиль, но они (или могут быть в обозримом будущем) фактически воспринимаются дизайнерами по-разному; поэтому тот же самый стиль может быть просто «совпадением».
  • Впоследствии создайте модуль, который определяет эти стили.
  • В этом модуле создается метод, который пересекает иерархию представлений и устанавливает соответствующий стиль в соответствии с назначенным вами значением tag.
  • Если вы хотите стилизовать различные типы элементов пользовательского интерфейса (например, UILabel, UITextField и UIButton) это, скорее всего, просто использовать различные tag диапазоны для каждого типа, так как велика вероятность, что они будут восприниматься как разные в какой-то момент конструкторами.
  • В вашем коде все, что вам нужно сделать, это вызвать этот метод выше для каждого вида верхнего уровня, который у вас есть, например, viewWillAppear, ... в зависимости от того, имеете ли вы дело с контроллером представления, ячейкой таблицы, пользовательский вид, ...

Я надеюсь, что это поможет или даст вам некоторое направление, которое приведет к решению, которое соответствует вашим потребностям и предпочтениям.

Другая идея:

  • сделать подкласс для каждого обозримого стиля этикетки, в котором вы установили все свойства, которые вы хотите.
  • В Interdace Builder изменить тип элемента пользовательского интерфейса на тип соответствующего подкласса.

Или сочетание:

  • сделать один подкласс для каждого типа элемента пользовательского интерфейса, вам нужен стиль.
  • В IB изменить тип, как указано выше.
  • В IB установите tag, чтобы выбрать конкретный стиль.
  • Это избавляет вас от наличия «многих» подклассов, которые находятся там, чтобы удерживать &, задав один стиль.
  • Это сохранит все стили (для каждого элемента пользовательского интерфейса) вместе в одном файле, что приятно для сравнения и обновления.
+0

Это определенно выполнимый и логичный подход, однако я беспокоюсь о стоимости исполнения, когда вы просматриваете всю страницу, чтобы соответствовать тегам. Подождем, если появится больше ответов. Спасибо за ваш быстрый ответ! – RainCast

+0

Эффективность @RainCast не может быть проблемой, поскольку иерархии представлений не очень глубокие и широкие, а переходы и тестирование очень быстрые. Но я также даю еще одну идею. –

+0

Спасибо, мне нравится вторая идея, мы на самом деле думали об одном и том же. :) – RainCast