使用@ 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所做的。

+1

不知道这是否会解决,但你没有限层到它的界限,你可能需要为了做它在运行时至少显示。不清楚故事板 – pbush25

+0

补充说,并没有修复我想要的。谢谢你。 – KotaBear233

+0

问题是您的代码在IB中崩溃,因此可设计性失败。我提供了一个不会崩溃的代码版本,因此它可以按预期工作。 – matt

您的代码在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 
    } 
} 

现在的按钮既是视察和设计性:

enter image description here

而且它也可以在运行应用程序。

+0

你能指定我的回答错误吗?就像你说过的那样:“你真的试过了吗?它在故事板的角落里吗?” –

+0

非常有用,您可以在didSet上调用'setUpView()',而不是在类的init上调用setUpView()。解决了这个诀窍。谢谢。 – Jad

试试这个:

@IBDesignable 
class CustomButton: UIButton { 

    @IBInspectable var cornerRadius: CGFloat = 0 { 
     didSet { 
      layer.cornerRadius = cornerRadius 
     } 
    } 

}