Я немного играю с @IBInspectables. Я создал многоразовое пользовательское представление, в котором есть несколько @IBInspectables.
Нет ли способа отдать приоритет @IBInspectables для выполнения?
В следующем случае для изменения цвета или шрифта заполнителя необходимо сделать это с помощью атрибутированного текста. Поэтому мне нужно, чтобы некоторые @IBInspectables, такие как Font, Color, выполнялись до @IBInspectable, который устанавливает текст-заполнитель.
В этом случае я сделал обходной путь, чтобы всегда получать цвет заполнителя. Тем не менее, я хочу добавить больше атрибутов в заполнитель, например шрифт, но если я не знаю, в каком порядке они будут выполняться, мне придется установить «attributedPlaceholder» из каждого IBInspectable, который изменяет заполнитель)
@IBInspectable
var placeholder: String? {
didSet {
guard let placeholder = placeholder else { return }
textField.attributedPlaceholder = NSAttributedString(string: placeholder, attributes: [NSAttributedStringKey.foregroundColor: placeholderColor ?? UIColor.red])
}
}
@IBInspectable
var placeholderColor: UIColor? {
didSet {
guard let placeholderColor = placeholderColor else { return }
textField.attributedPlaceholder = NSAttributedString(string: textField.placeholder != nil ? textField.placeholder! : "", attributes: [NSAttributedStringKey.foregroundColor: placeholderColor])
}
}
@IBInspectable
аналогичен раскрытию свойства в Interface Builder — что-то, что раньше было похоже на установку свойства для элемента управления в Visual Basic. Настоящий вопрос для вас: почему? Зачем кому-то заботиться о приоритетеString
надUIColor
в режиме разработки? Без такой ясности я предполагаю, что либо не понимаю реальной проблемы, либо ответ отрицательный. - person dfd   schedule 20.03.2018prepareForInterfaceBuilder()
, переопределение вUIView
может выполнить что-то близкое к тому, что вы пытаетесь сделать. - person dfd   schedule 20.03.2018