【问题标题】:How to initialize an empty object of a custom UIImageView subclass如何初始化自定义 UIImageView 子类的空对象
【发布时间】:2020-08-05 17:21:44
【问题描述】:

我有一个自定义 UIImageView 子类,它运行一些基本代码,例如创建阴影等。 当我不覆盖任何 init 时,一切正常。我可以创建一个空的 CustomImageView() ,就像我创建一个空的 UIImageView() 一样。当我添加所有必需的覆盖时,我不能再创建一个空对象了。

我得到的错误是:

无法调用类型“ProfilePictureImageView”的初始化程序,没有 论据

建议:

  1. “ProfilePictureImageView”的重载存在这些部分匹配的参数列表:(coder: NSCoder), (frame: CGRect), (image: UIImage?)

我像这样在视图控制器中创建空对象:

var customImageView = CustomImageView()

我的自定义 UIImageView 子类如下所示:

class CustomImageView: UIImageView {
    
    override init(image: UIImage?) {
        super.init(image: image)
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
    }


// Followed by my custom variables and methods.

}

我尝试添加以下内容,假设我缺少某种空的init。但这也不起作用。

override init() {
    super.init()
}

【问题讨论】:

    标签: swift uiimageview initialization overriding subclass


    【解决方案1】:

    你必须创建一个convenience init 方法。

    class CustomImageView: UIImageView {
        //...
        convenience init() {
            self.init(frame: .zero) // or self.init(image: nil)
        }
    }
    

    【讨论】:

    • 这正是缺少的!谢谢!这两个版本中的任何一个是推荐的吗? frame .zeroimage: nil ?
    • 不。虽然它的目的是在需要时设置默认大小写。例如,如果您想设置默认占位符图像或默认框架。
    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多