如何初始化自定义 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 .zero
或 image: nil
?
不。虽然它的目的是在需要时设置默认大小写。例如,如果您想设置默认占位符图像或默认框架。以上是关于如何初始化自定义 UIImageView 子类的空对象的主要内容,如果未能解决你的问题,请参考以下文章
如何访问其他控制器类中 UIImageView 子类中声明的图像属性?
带有 UIImageView 的自定义 UITableViewCell 不为某些单元格加载图像