关于 awakeFromNib() - 错误实例成员 'button' 不能用于类型 'CustomView'
On awakeFromNib() - Error Instance member 'button' cannot be used on type 'CustomView'
我创建了一个自定义 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。这是 link https://github.com/felixmariaa/AwakeFromNibTest/
这应该可以工作,但我不确定出了什么问题。
在输入 awakeFromNib 时,我使用了 XCode 提供的自动完成功能来完成该功能,导致以下代码:
override class func awakeFromNib() {
}
注意函数声明中的class。这是导致错误的原因:
我删除了它并且代码工作正常。认为这会对某人有所帮助。
我创建了一个自定义 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。这是 link https://github.com/felixmariaa/AwakeFromNibTest/
这应该可以工作,但我不确定出了什么问题。
在输入 awakeFromNib 时,我使用了 XCode 提供的自动完成功能来完成该功能,导致以下代码:
override class func awakeFromNib() {
}
注意函数声明中的class。这是导致错误的原因: 我删除了它并且代码工作正常。认为这会对某人有所帮助。