Распространение пользовательских признаков не работает должным образом за пределами иерархии представлений.IOS

Программируем под IOS
Ответить
Гость
 Распространение пользовательских признаков не работает должным образом за пределами иерархии представлений.

Сообщение Гость »


Я пытаюсь создать компоненты с собственным стилем, которые могут обрабатывать пользовательские свойства, передаваемые сверху, и соответствующим образом корректировать их стиль. Например:

Код: Выделить всё

class CustomButton: UIButton {
override init(frame: CGRect) {
super.init(frame: frame)

self.registerForTraitChanges([DangerStyleTrait.self]) { (self: Self, _) in
// Do some styling changes if danger is true or not
}
}
}
I want to use these components inside others:

Код: Выделить всё

class InfoViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()

let button = CustomButton()
view.addSubview(button)
// 
}
}
In my usual scenario, the custom trait would be applied before presentation:

Код: Выделить всё

func showWarningAlert() {
let viewController = InfoViewController
viewController.traitOverrides.dangerStyleEnabled = true
present(viewController, animated: true)
}
But the above does not work! The button never receives the trait change update and so the danger styling never gets applied. I would have assumed that as soon as the view controller's view gets added to the hierarchy, the update would get sent to the button.
If this is expected behaviour, is there a workaround for the above scenario? I would hope it is a reasonable use case to want to set up a whole view controller and then later apply a trait and have it propagate all the way down on presentation.
Thanks!


Источник: https://stackoverflow.com/questions/781 ... -hierarchy
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»