2016-08-31 5 views
1

Для приложения iOS9 +/Swift 3 со многими UIViewControllers, что является наилучшим способом унаследовать одни и те же цвета фона и другие общие атрибуты (шрифты, интервал и т. Д.). Лучше ли иметь общий базовый класс? Или какой-то протокол?Наследуйте цвет фона и другие атрибуты для многих UIViewControllers

+1

«Если ваш вопрос можно ответить по всей книге, или есть ** много действительных ответов **, это, вероятно, слишком широко для нашего формата» – ZGski

ответ

3

Поскольку большинство визуальных атрибутов связаны с конкретными подклассами UIView и UIView (например, UILabel, UIButton и т. Д.), Я бы предположил, что если это обрабатывается на уровне UIViewController, это вынуждает диспетчер представлений отвечать за слишком много деталей другим классам.

Встроенный механизм Apple для установки глобальных визуальных атрибутов на различные виды - это API UIAppearance. Есть good overview of that on NSHipster

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

Я лично предпочитаю использовать специальную структуру стилей, которая позволяет применять комбинации предопределенных стилей к представлениям. I have written about this, а также создал framework, чтобы облегчить создание стилей для компонентов UIKit и их применение и просмотр их внутри раскадровки.

+0

Другого подхода для определения компонуемых и многоразовых стилей, если вы 're заинтересован: [StyleSheet] (https://github.com/werediver/StyleSheet). – werediver

1

У вас может быть файл констант с константами пользовательского интерфейса. Просто обратитесь к этим переменным во всех контроллерах представлений, и если вам нужно внести изменения, все остальное тоже изменится.

У вас также может быть расширение для определенных вещей. Обычно у меня есть расширение на UIColor, которое возвращает цвет, и я могу изменить его в расширении, и он изменится везде.

например.

extension UIColor{ 
    class func selectedBlue() -> UIColor { 
     return UIColor(red:0.25, green:0.58, blue:0.97, alpha:1) 
    } 
} 
0

Вы можете иметь общий базовый класс для требуемого компонента для например настройки цвета фона ваших взглядов, создать подкласс пусть его имя будет BackgroundView.

class UHBView: UIView { 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     self.backgroundColor = UIColor.blueColor(); //Any color you want 
    } 

} 

Теперь установите этот подкласс как пользовательский класс в инспекторе идентификации в Interface Builder для любого вида.

enter image description here

+0

Это похоже на атрибут runtime, и у меня создается впечатление, что протоколы лучше, чем наследование в Swift ... но я действительно не знаю. –

Смежные вопросы