Использование методов установки через прокси-сервер Appearance - PullRequest
0 голосов
/ 30 марта 2019

Я создал пользовательский элемент управления, в котором я хочу настроить оттенок цвета границы для различных состояний.

В идеале я бы смог сделать это:

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?
}
...