2016-04-21 18 views
2

Ich habe diese benutzerdefinierte Klasse für eine Schaltfläche.Eckenradius nicht auf Button im Storyboard mit @ IBDesignable/@ 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 
    } 

} 

Aber der Eckenradius wird nicht auf der Schaltfläche im Storyboard angezeigt.

Ich verstehe @ IBInspectable können Sie nur den Wert im Inspektor-Panel ändern. Ich denke, das ist nicht das, wonach ich suche.

Ich möchte den Eckenradius nur im Storyboard anzeigen, wenn ich eine Schaltfläche mit dieser Klasse erstellen. Was ich dachte, ist, was @IBDesignable tut.

+1

Sie wissen nicht, ob es zu lösen, aber sie sind nicht die Schicht ihre Grenzen Clipping, die Sie wahrscheinlich in tun müssen, um es zumindest zur Laufzeit angezeigt werden soll. Nicht sicher über Storyboard – pbush25

+0

Hinzugefügt, und nicht beheben, was ich wollte. Trotzdem danke. – KotaBear233

+0

Das Problem ist, dass Ihr Code in IB abstürzt, so dass die Designability fehlschlägt. Ich habe eine Version Ihres Codes bereitgestellt, die nicht abstürzt, also funktioniert es wie erwartet. – matt

Antwort

7

Ihr Code stürzt in IB ab, die Designability schlägt fehl. Hier ist viel einfacher Code, der funktioniert:

@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 
    } 
} 

Nun ist die Taste beide prüfbare und gestaltbares ist:

enter image description here

Und es funktioniert auch in der laufenden App.

+0

Können Sie angeben, wie meine Antwort falsch war? wie du gesagt hast: "Hast du das wirklich versucht? Ist es um die Ecken im Storyboard gegangen?" –

+0

war sehr nützlich, dass Sie 'setUpView()' auf didset eher auf Init der Klasse aufrufen. Das hat den Trick gelöst. Vielen Dank. – Jad

1

Versuchen Sie dieses:

@IBDesignable 
class CustomButton: UIButton { 

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

}