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

Posted

技术标签:

【中文标题】在 awakeFromNib() 上 - 错误实例成员 \'button\' 不能用于类型 \'CustomView\'【英文标题】:On awakeFromNib() - Error Instance member 'button' cannot be used on type 'CustomView'在 awakeFromNib() 上 - 错误实例成员 'button' 不能用于类型 'CustomView' 【发布时间】:2020-03-10 08:30:58 【问题描述】:

我创建了一个自定义 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】:

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

override class func awakeFromNib() 
 

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

【讨论】:

它解决了我的问题。在我的情况下,错误是 - 实例成员 'layer' 不能用于类型 'CustomView' 非常感谢!我自己不会看到它。为什么 Xcode 将 awakeFromNib 重写为“类”方法?

以上是关于在 awakeFromNib() 上 - 错误实例成员 'button' 不能用于类型 'CustomView'的主要内容,如果未能解决你的问题,请参考以下文章

为啥在使用情节提要时反复调用 AwakeFromNib?

如何在同一类的 awakeFromNib 方法中获取当前视图控制器?

awakeFromNib 中的变量为零

在 awakeFromNib 上调用 UIView animate withDuration 不会执行动画

awakeFromNib 啥时候被调用?

AwakeFromNib 没有出口