Как передать значения в инициализатор UIView из XIB? - PullRequest
0 голосов
/ 31 января 2019

Я сделал пользовательский файл UIView XIB с некоторыми выходами.Я хочу иметь возможность загружать его программно из других мест в моем коде.Я использую autolayout в xib.Моя проблема в том, что мне нужно инициализировать его значением параметра, чтобы удовлетворить метод делегата.Я не уверен, как передать параметр во время инициализации.Я также не совсем понимаю весь init (frame :) vs init (coder :) и как удобство init будет работать здесь.Любой совет?

Справочная информация: в настоящее время весь вид является программным в Obj-C, и я переношу его в XIB с помощью swift.

1 Ответ

0 голосов
/ 31 января 2019

Существует много разных способов обработки инициализации представления.Вы можете создать статическую функцию, которая сделает всю работу за вас.это один из способов избежать переопределения методов init.

class TestView: UIView {
    var delegate: Any!

    static func instantiate(with delegate: Any) -> TestView {
        let nib = UINib(nibName: "TestView", bundle: nil)
        guard let testView = nib.instantiate(withOwner: nil)[0] as? TestView else {
            fatalError("Attempted to create TestView, failed to find object")
        }
        testView.delegate = delegate
        return testView
    }
}

Затем вы делаете следующее, чтобы создать ваше представление

let testView = TestView.instantiate(with:mydelegate)
...