使用@ IBDesigable/@ IBInspectable在故事板的按钮上不显示圆角半径
问题描述:
我有一个按钮的自定义类。使用@ IBDesigable/@ IBInspectable在故事板的按钮上不显示圆角半径
import UIKit
@IBDesignable
class CustomButton: UIButton {
@IBInspectable var cornerRadiusValue: CGFloat = 10.0 {
didSet {
setUpView()
}
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.layer.cornerRadius = 10.0
}
override func awakeFromNib() {
setUpView()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setUpView()
}
func setUpView() {
self.layer.cornerRadius = 10.0
}
}
但是角落半径未显示在故事板的按钮上。
我明白@IBInspectable只允许您更改巡视面板中的值。我想那不是我正在寻找的。
我希望角落半径能在故事板中显示,当我创建一个带有该类的按钮时。我认为这就是@IBDesignable所做的。
答
您的代码在IB中崩溃,因此设计失败。这里是工作方式容易得多代码:
@IBDesignable
class CustomButton: UIButton {
@IBInspectable var cornerRadiusValue: CGFloat = 10.0 {
didSet {
setUpView()
}
}
override func awakeFromNib() {
super.awakeFromNib()
setUpView()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setUpView()
}
func setUpView() {
self.layer.cornerRadius = self.cornerRadiusValue
self.clipsToBounds = true
}
}
现在的按钮既是视察和设计性:
而且它也可以在运行应用程序。
+0
你能指定我的回答错误吗?就像你说过的那样:“你真的试过了吗?它在故事板的角落里吗?” –
+0
非常有用,您可以在didSet上调用'setUpView()',而不是在类的init上调用setUpView()。解决了这个诀窍。谢谢。 – Jad
答
试试这个:
@IBDesignable
class CustomButton: UIButton {
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
}
}
}
不知道这是否会解决,但你没有限层到它的界限,你可能需要为了做它在运行时至少显示。不清楚故事板 – pbush25
补充说,并没有修复我想要的。谢谢你。 – KotaBear233
问题是您的代码在IB中崩溃,因此可设计性失败。我提供了一个不会崩溃的代码版本,因此它可以按预期工作。 – matt