Многоразовые стили UILabel в Swift, Xcode 6.4

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


person user1354603    schedule 13.08.2015    source источник
comment
Что не так с установкой атрибутов font и textColor для стандартного UILabel?   -  person hennes    schedule 13.08.2015
comment
Вы имеете в виду индивидуально для каждого UILabel с помощью построителя интерфейса?   -  person user1354603    schedule 13.08.2015
comment
Ну, в вашем вопросе не упоминается IB. Эти свойства, очевидно, необходимо применять в коде. В качестве альтернативы вы можете попробовать протокол UIAppearance. Однако в Swift он ограничен.   -  person hennes    schedule 13.08.2015


Ответы (1)


Я не знаю, что это хорошая практика... но вы могли бы что-то вроде:

extension UILabel {
    @IBInspectable var myStyle: String {
        set {
            switch newValue  {
            case "style1":
                self.font = UIFont.systemFontOfSize(17)
                self.textColor = UIColor.blackColor()

            case "style2":
                self.font = UIFont.boldSystemFontOfSize(32)
                self.textColor = UIColor.redColor()

            default:
                break
            }
        }
        get {
            return ""
        }
    }
}

скриншот


Возможно, вам следует определить подкласс с @IBDesignable. Потому что это показывает гораздо лучший предварительный просмотр в IB. И вы можете использовать функцию Editor > Size To Fit или Auto Layout в IB.

@IBDesignable class StyledLabel: UILabel {
    @IBInspectable var myStyle: String = "" {
        didSet {
            switch self.myStyle {
            case "style1":
                self.font = UIFont.systemFontOfSize(17)
                self.textColor = UIColor.blackColor()
            case "style2":
                self.font = UIFont.boldSystemFontOfSize(32)
                self.textColor = UIColor.redColor()
            default:
                break
            }
        }
    }
}

скриншот

person rintaro    schedule 13.08.2015
comment
Это именно то, что я искал! Теперь мне просто нужно знать, является ли это хорошей практикой или нет. - person user1354603; 13.08.2015
comment
Весь смысл этого вопроса заключался в том, чтобы избежать использования пользовательских классов, потому что я хотел избежать установки пользовательских классов для всех моих UILabels :).. Предварительный просмотр менее важен, чем написание меньшего количества кода, поэтому пока я буду придерживаться того, что вы написали до редактировать - person user1354603; 13.08.2015
comment
Второй вариант (создание класса) я протестировал, и он действительно великолепен. Теперь я могу просто изменить имя класса своего пользовательского интерфейса и стиля по своему усмотрению. Действительно полезно. - person Touhid; 04.11.2020