如何初始化自定义 UIImageView 子类的空对象

Posted

技术标签:

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

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

我得到的错误是:

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

建议:

    “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()

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

这正是缺少的!谢谢!这两个版本中的任何一个是推荐的吗? frame .zeroimage: nil ? 不。虽然它的目的是在需要时设置默认大小写。例如,如果您想设置默认占位符图像或默认框架。

以上是关于如何初始化自定义 UIImageView 子类的空对象的主要内容,如果未能解决你的问题,请参考以下文章

如何访问其他控制器类中 UIImageView 子类中声明的图像属性?

带有 UIImageView 的自定义 UITableViewCell 不为某些单元格加载图像

子类化自定义 UIView - 如何初始化

自定义 UITableViewCell 未更新

如何保存 UIImage 或 UIImageView 的状态?

iOS 子类 UICollectionViewCell 自定义 init 方法