На awakeFromNib () - элемент «Ошибка» экземпляра ошибки не может использоваться для типа «CustomView» - PullRequest
2 голосов
/ 10 марта 2020

Я создал пользовательский UIView в виде файла .xib с UIView, имеющим одну кнопку. Я загружаю UIView, используя приведенный ниже код.

struct ContentView: View {
    var body: some View {
        CustomViewRepresentable()
    }
}

struct CustomViewRepresentable: UIViewRepresentable {
    typealias UIViewType = CustomView

    func makeUIView(context: UIViewRepresentableContext<CustomViewRepresentable>) -> CustomView {
        let customView = Bundle.main.loadNibNamed("CustomView", owner: nil, options: nil)![0] as! CustomView
        return customView
    }

    func updateUIView(_ uiView: CustomView, context: UIViewRepresentableContext<CustomViewRepresentable>) {
    }
}

Пользовательский вид имеет следующий код:

class CustomView: UIView {

    @IBOutlet weak var button: UIButton!

    override init(frame: CGRect) {
        super.init(frame: frame)
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }

    override class func awakeFromNib() {
        super.awakeFromNib()
        // Error - Instance member 'button' cannot be used on type 'CustomView'
        button.addTarget(self, action: #selector(touchUpInside), for: .touchUpInside)
    }

    @objc func touchUpInside(_ sender: UIButton) {
        print("Button clicked")
    }
}

Я загрузил исходный код в github. Вот ссылка https://github.com/felixmariaa/AwakeFromNibTest/

Это должно работать, и я не уверен, что происходит не так.

1 Ответ

6 голосов
/ 10 марта 2020

При вводе awakeFromNib я использовал автозаполнение, предоставленное XCode, для завершения функции, что привело к следующему коду:

override class func awakeFromNib() {
} 

Обратите внимание на класс в забаве c декларация. Это было причиной ошибки: я удалил ее, и код работал нормально. Думаю, это кому-нибудь поможет.

...