内部のオブジェクトの多くが準拠するNSKeyValueCoding
プロトコルがありますUIKit
。
内のメソッドの 1 つNSKeyValueCoding
ですvalueForKey:
(および他の多くの関連するメソッドについては、リンクしたドキュメントを確認してください)。
オブジェクトを呼び出すvalueForKey:
ことで、実行時にインターフェイス ビルダーで設定されたプロパティにアクセスできます。
したがって、たとえば、このラベルでは、次のようなことを行う場合があります。
目的 C:
NSString *style = [myLabel valueForKey:@"styleName"];
迅速:
let style = myLabel.valueForKey("styleName")
これで、Interface Builder を介して設定された値を取得でき、実行時に、ここで設定された値に基づいてラベルを使用して何かを実行できます。たとえば、ここでは、特定の「スタイル名」を使用して、特定の方法でラベルをデザインできます。
プロジェクトでvalueForKey
またはを検索する"styleName"
と、このプロパティが使用されている場所と、そのプロパティで何が行われているかが正確にわかる可能性があります。
属性インスペクターに関する私の質問についてフォローアップするために、Xcode 6 の時点で、プロパティを使用@IBInspectable
して属性インスペクターに表示されるプロパティを作成できます (ここで見られるように)。UIView
この拡張機能を検討してください。
extension UIView {
@IBInspectable var borderColor : UIColor? {
set (newValue) {
self.layer.borderColor = (newValue ?? UIColor.clearColor()).CGColor
}
get {
return UIColor(CGColor: self.layer.borderColor)
}
}
}
UIView
ストーリーボードの任意の (またはサブクラス)の属性インスペクターを見ると、次のように表示されます。
Attributes Inspector を介して、通常は存在しない "Border Color" プロパティを利用できるようになりました。このツールを指摘する理由は、属性インスペクターを介してこれらのプロパティのいずれかを設定すると、設定した値が実際にはこれらの「ユーザー定義のランタイム属性」の 1 つとして保存されるためです。
そして、このビューがアプリの XIB からロードされるたびに、最初に発生することの 1 つはborderColor
、Interface Builder で選択したこの赤い色にプロパティが設定されることです。