C'è un NSKeyValueCoding
protocol, che molti degli oggetti all'interno UIKit
conforme alle.
Uno dei metodi all'interno di NSKeyValueCoding
è valueForKey:
(e molti altri metodi pertinenti, controllare la documentazione che ho collegato).
Chiamando valueForKey:
su un oggetto, è possibile, in fase di esecuzione, accedere alle proprietà impostate sul generatore di interfacce.
Così, ad esempio, su questa etichetta, potrei fare qualcosa di simile:
Objective-C:
NSString *style = [myLabel valueForKey:@"styleName"];
Swift:
let style = myLabel.valueForKey("styleName")
Ora può prendere il valore impostato tramite Interface Builder e in fase di esecuzione, posso fare qualcosa con l'etichetta in base a quale valore wa è impostato qui. Per esempio, qui, potrei usare il particolare "nome di stile" per progettare l'etichetta in un modo particolare.
Se si ricerca il progetto per valueForKey
o "styleName"
, è probabile che si verifichi dove viene utilizzata questa proprietà e cosa si sta facendo esattamente con esso.
di follow-up per la mia domanda per quanto riguarda l'attributo ispettore, come di Xcode 6, siamo in grado di utilizzare la proprietà @IBInspectable
per creare le proprietà che appariranno nella finestra di ispezione Attributi (as seen here). Considerate questo UIView
estensione:
extension UIView {
@IBInspectable var borderColor : UIColor? {
set (newValue) {
self.layer.borderColor = (newValue ?? UIColor.clearColor()).CGColor
}
get {
return UIColor(CGColor: self.layer.borderColor)
}
}
}
Ora, se diamo uno sguardo alla Attributi per qualsiasi UIView
(o sottoclasse) nel nostro storyboard, vedremo questo:
Ora avere una proprietà "Colore bordo" disponibile tramite l'ispettore Attributi che non è ordinariamente lì.La ragione per cui faccio notare questo strumento è perché ogni volta che si imposta una di queste proprietà tramite l'ispettore attributi, il valore impostato viene effettivamente memorizzata come uno di questi "Runtime definito dall'utente Attributi":
E ogni volta questa vista è caricata da XIB nella mia app, una delle prime cose che accadrà è che la mia proprietà borderColor
sarà impostata su questo colore rosso che ho selezionato in Interface Builder.
Se si fa clic su "Attitributes Ispezionare" (appena a destra del "Ispettore Identità"), c'è un campo "styleName"? – nhgrif
Ok. Sto scrivendo una risposta. – nhgrif