Ho una sottoclasse di UIView
chiamata MyView
che sto creando.Utilizzo di IBDesignable e prepareForInterfaceBuilder con una UILabel
In esso c'è un UILabel
(questo è aggiunto nel codice non in InterfaceBuilder per motivi).
Quindi ho una proprietà su MyView
denominata color
.
Quello che mi piacerebbe è che Interface Builder sia in grado di selezionare lo color
e anche di visualizzare l'etichetta con il carattere impostato su quel colore.
Nel mio codice ho ...
@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 posso vedere la proprietà colore lì e posso impostarlo. Fastidiosamente ci vuole un valore predefinito di .clearColor() anche se non il colore che ho impostato nel codice. C'è un modo per risolvere questo?
IBDesignable
Quando metto la vista nel InterfaceBuilder mostra tutte le proprietà ispezionabili ma nulla è mostrata nella vista reale.
Quando lo eseguo tutto funziona correttamente. Mi piacerebbe essere in grado di ottenere qualcosa di lavoro (diverso da drawRect) in IB. Comunque sto trovando una netta mancanza di documentazione.
Modifica - Avvertenze
Ho appena notato che sto ricevendo costruire errori/avvisi dicendo ...
avvertimento: IB Designables: Ignorando attributo runtime definiti dall'utente per il percorso chiave "colore "su istanza di" UIView ". Colpire un'eccezione quando si tenta di impostare il suo valore: [setValue: forUndefinedKey:]: questa classe non è un valore chiave che codifica-compatibile per il colore chiave.
Questo probabilmente cambierà la soluzione :)
Bene, al momento sto ricevendo un "errore di segmentazione: 11" quando provo a correre, quindi non ho idea di cosa sta succedendo. Questa potrebbe essere la causa di questo. Sono contento di sapere che ho avuto il codice vero, però. Ho installato Xcode 4 (ragioni) oggi, quindi mi chiedo se l'installazione non abbia funzionato con i compilatori o qualcosa del genere ?! Grazie comunque. Terrò il mio progetto Swift: D – Fogmeister
OMLG! L'errore del segmento era perché usavo '.clearColor()' in un attributo invece di 'UIColor.clearColor()' ma non c'erano errori nel codice. Ad ogni modo, tutto funziona ora: D Grazie! – Fogmeister