Я создал пользовательский элемент управления, в котором я хочу настроить оттенок цвета границы для различных состояний.
В идеале я бы смог сделать это:
let appearance = MyView.appearance()
appearance.set(borderTintColor: .red, forControlState: .normal)
appearance.set(borderTintColor: .blue, forControlState: .disabled)
За исключением того, что я получаю сбой с Thread 1: EXC_BAD_ACCESS (code=2, address=0x105916e78)
, когда вызывается первый сеттер.
Вот так выглядит мой пользовательский элемент управления:
class MyView: UIControl {
func set(borderTintColor: UIColor?, forControlState controlState: UIControl.State) {
// literally empty
}
}
Я также пытался добавить префикс метода к @obcj
. Я понял, что в конечном итоге мне нужно будет сохранить это в каком-то словаре. На самом деле, это то, с чего я начал ... и сократил это до цели с целью составления вопроса.
Чтобы обойти это, я определяю свойства для каждого из поддерживаемых мной состояний, но я бы предпочел использовать приведенный выше API, так как он более знаком, когда вы взаимодействуете с подклассом UIControl
. Мне также не нужно добавлять свойства для каждого состояния, которое я поддерживаю.
class MyView: UIControl {
dynamic var normalBorderTintColor: UIColor?
dynamic var disabledBorderTintColor: UIColor?
}