gpt4 book ai didi

ios - 将 IBInspectable 应用于 iOS 中的所有 View 类型

转载 作者:行者123 更新时间:2023-12-01 19:46:37 26 4
gpt4 key购买 nike

我正在申请IBInspectable所有类型的 View ,如 UIView , UIButton , UITextField , UIImageView , ETC。
这是我所做的:

@IBDesignable
class BaseView: UIView
{
override func layoutSubviews() {
super.layoutSubviews()

updateCornerRadius()
}

@IBInspectable var rounded: Bool = false {
didSet {
updateCornerRadius()
}
}

@IBInspectable var cornerRadius: CGFloat = 4 {
didSet {
updateCornerRadius()
}
}

private func updateCornerRadius() {
layer.cornerRadius = rounded ? cornerRadius : 0
}
}

所有 UIView 都可以正常工作使用 BaseView Storyboard中的子类,但是如何将其用于按钮、文本字段、 ImageView 等?

可能正在使用协议(protocol)或扩展来避免将此代码重复到所有其他类型的 View ...

最佳答案

您应该使用扩展而不是子类,并直接访问 layer 属性:

extension UIView
{
@IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius;
}
set(value) {
layer.cornerRadius = value;
}
}

var rounded: Bool {
return layer.cornerRadius > 0.0;
}
}

注意:由于您没有实现 drawRect使用 @IBDesignable没必要。你不能实现 rounded以这种方式作为可设置属性,但您可以为此设置只读属性。

关于ios - 将 IBInspectable 应用于 iOS 中的所有 View 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48180952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com