在awakeFromNib() 上 - 错误实例成员“button”不能用于类型“CustomView”

Fel*_*gam 13 uiview ios awakefromnib swift swiftui

我创建了一个自定义 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>) {
    }
}
Run Code Online (Sandbox Code Playgroud)

自定义视图具有以下代码:

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")
    }
}
Run Code Online (Sandbox Code Playgroud)

我已将源代码上传到 github。这是链接https://github.com/felixmariaa/AwakeFromNibTest/

这应该有效,我不确定出了什么问题。

Fel*_*gam 78

在输入awakeFromNib时,我使用了XCode提供的自动完成功能来完成该功能,结果如下代码:

override class func awakeFromNib() {
} 
Run Code Online (Sandbox Code Playgroud)

注意func 声明中的。这导致了错误:我删除了它并且代码运行良好。认为这会帮助某人。

  • 太感谢了!我自己不会看到它。为什么 Xcode 将 awakeFromNib 重写为“类”方法? (3认同)