如何与协议共享重用的 UIImageView?
How can I share a reused UIImageView with protocols?
我不确定这是否可行,但我有一些自定义 UITableViewCells
,所有这些都包含一些通用组件。
例如,它们都包含一个代表用户头像的UIIMageView
:
fileprivate var messageAvatar: UIImageView = {
let imageView = UIImageView(frame: .zero)
imageView.layer.cornerRadius = 35 / 2
imageView.layer.masksToBounds = true
imageView.image = #imageLiteral(resourceName: "user_avatar")
return imageView
}()
与其在多个地方重复这一点,我想我可以创建一个 Protocol
具有这些常用的必需属性,并使用扩展来为它们提供标准的默认实现:
protocol MyCustomCellProtocol: class {
var avatar: UIImageView { get set }
}
extension MyCustomCellProtocol {
var avatar: UIImageView {
let imageView = UIImageView(frame: .zero)
imageView.layer.cornerRadius = 35 / 2
imageView.layer.masksToBounds = true
return imageView
}
}
我不明白的是我如何初始化这些或在我的自定义单元格中使用它们。
这是正确的方法吗?
我认为最好创建 UIImageView
的子类并在 awakeFromNib
中设置 "default" 属性
class AvatarImageView: UIImageView {
override func awakeFromNib() {
layer.cornerRadius = 35 / 2
layer.masksToBounds = true
}
}
然后您可以在需要时为 类 中的自定义子类创建图像视图作为 lazy
变量
lazy var messageAvatar: AvatarImageView = {
let imageView = AvatarImageView(frame: .zero)
imageView.image = UIImage(named: "user_avatar")
return imageView
}()
我不确定这是否可行,但我有一些自定义 UITableViewCells
,所有这些都包含一些通用组件。
例如,它们都包含一个代表用户头像的UIIMageView
:
fileprivate var messageAvatar: UIImageView = {
let imageView = UIImageView(frame: .zero)
imageView.layer.cornerRadius = 35 / 2
imageView.layer.masksToBounds = true
imageView.image = #imageLiteral(resourceName: "user_avatar")
return imageView
}()
与其在多个地方重复这一点,我想我可以创建一个 Protocol
具有这些常用的必需属性,并使用扩展来为它们提供标准的默认实现:
protocol MyCustomCellProtocol: class {
var avatar: UIImageView { get set }
}
extension MyCustomCellProtocol {
var avatar: UIImageView {
let imageView = UIImageView(frame: .zero)
imageView.layer.cornerRadius = 35 / 2
imageView.layer.masksToBounds = true
return imageView
}
}
我不明白的是我如何初始化这些或在我的自定义单元格中使用它们。
这是正确的方法吗?
我认为最好创建 UIImageView
的子类并在 awakeFromNib
class AvatarImageView: UIImageView {
override func awakeFromNib() {
layer.cornerRadius = 35 / 2
layer.masksToBounds = true
}
}
然后您可以在需要时为 类 中的自定义子类创建图像视图作为 lazy
变量
lazy var messageAvatar: AvatarImageView = {
let imageView = AvatarImageView(frame: .zero)
imageView.image = UIImage(named: "user_avatar")
return imageView
}()