Ich habe eine Unterklasse von UIView
namens MyView
, die ich erstelle.Verwenden von IBDesignable und prepareForInterfaceBuilder mit einem UILabel
Darin gibt es eine UILabel
(dies ist in Code nicht in InterfaceBuilder aus Gründen hinzugefügt).
Ich habe dann eine Eigenschaft auf MyView
namens color
.
Was ich möchte, ist Interface Builder in der Lage sein, die color
zu wählen und auch die Beschriftung mit der Schriftart anzuzeigen, die auf diese Farbe festgelegt ist.
In meinem Code ich habe ...
@IBDesignable class MyView: UIView {
private let textLabel = UILabel()
@IBInspectable var color: UIColor = .blackColor() {
didSet {
textLabel.textColor = color
}
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialSetup()
}
override init(frame: CGRect) {
super.init(frame: frame)
initialSetup()
}
private func initialSetup() -> Void {
self.backgroundColor = .clearColor()
textLabel.textAlignment = .Center
textLabel.numberOfLines = 0
addSubview(textLabel)
}
override func layoutSubviews() {
super.layoutSubviews()
textLabel.frame = bounds
}
// I have no idea what I'm doing here?!
override func prepareForInterfaceBuilder() {
// should I create a label specifically for here?
// or should I use the property textLabel?
textLabel.text = "Hello, world!" // setting place holder IB text?
textLabel.textColor = color
textLabel.font = .systemFontOfSize(21)
textLabel.textAlignment = .Center
textLabel.numberOfLines = 0
// do I need to add sub view?
}
}
IBInspectable
In IB kann ich die Farbe Eigenschaft dort sehen, und ich kann es eingestellt. Ärgerlich nimmt es einen Standardwert von .clearColor(), aber nicht die Farbe, die ich im Code einstelle. Gibt es eine Möglichkeit, das zu beheben?
IBDesignable
Als ich den Blick in Interface legte es zeigt alle prüfbaren Eigenschaften, aber nichts ist in der aktuellen Ansicht gezeigt.
Wenn ich es laufe alles funktioniert gut. Ich möchte nur etwas in IB arbeiten lassen (außer drawRect). Ich finde jedoch einen deutlichen Mangel an Dokumentation.
Bearbeiten - Warnungen
Ich habe gerade bemerkt, dass ich bauen Fehler bekommen/Warnungen sagen ...
Warnung: IB Designables: für Schlüsselpfad benutzerdefinierte Laufzeit Attribut Ignorieren „Farbe "in der Instanz von" UIView ". Beim Versuch, den Wert zu setzen, wurde eine Ausnahme ausgelöst: [setValue: forUndefinedKey:]: Diese Klasse ist für die Schlüsselfarbe nicht Schlüsselcodierkonform.
Dies wird wahrscheinlich die Lösung :)
ändern
Nun, im Moment bekomme ich eine "Segmentation Fault: 11" beim Versuch zu laufen, also keine Ahnung was los ist. Das könnte der Grund dafür sein. Gut zu wissen, dass ich den richtigen Code richtig verstanden habe. Ich habe heute Xcode 4 (Gründe) installiert, also frage ich mich, ob diese Installation sich mit Compilern oder sowas herumgeschlagen hat ?! Trotzdem danke. Behalte mein Swift-Projekt: D – Fogmeister
OMLG! Der seg-Fehler lag daran, dass ich '.clearColor()' in einem Attribut anstelle von 'UIColor.clearColor()' verwendet habe, aber im Code keine Fehler angezeigt wurden. Wie auch immer, alles funktioniert jetzt: D Danke! – Fogmeister