WWDC 2014のセッション411「Interface Builderの新機能」を参照し、@IBDesignable
クラスを作成するためのフレームワークの作成方法を試していました。アプリケーションを実行せずにStoryboardで私の変更をプレビューします。
クラスを特定のビューに追加すると、@IBInspectable
プロパティが正しく表示され、次のコードでビューが正しくレンダリングされます。
@IBDesignable
class MyView: UIView {
@IBInspectable var borderColor: UIColor = UIColor.clearColor() {
didSet {
layer.borderColor = borderColor.CGColor
}
}
@IBInspectable var borderWidth: CGFloat = 0 {
didSet {
layer.borderWidth = borderWidth
}
}
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
}
}
@IBInspectable var masksToBounds: Bool = false {
didSet {
layer.masksToBounds = masksToBounds
}
}
}
これらの属性がser Defined Runtime Attributes(Under Identity Inspector)に追加されていることに気付きました。これから私が期待しているのは、特定のビューで行った変更を維持するためにコードを実行するときです。
アプリケーションを実行すると、ビューはser Defined Runtime Attributesをロードせず、出力でこのエラーを表示します(クラッシュではありません):
Unknown class MyClass in Interface Builder file
Failed to set (cornerRadius) user defined inspected property on (UIView)
アプリケーションがロードされない原因は何ですかユーザー定義のランタイム属性Identity Inspectorの下に追加したものですか?
コードは正しいです。@ IBDesignable
を宣言すると、すべての@IBInspectable
プロパティがユーザー定義のランタイム属性としてInterface Builderに公開されます。
問題-
Interface Builderファイルの不明なクラスMyClass
インターフェイスビルダーがクラスを見つけることができなかったことを意味します。アプリに存在しない間違ったclassを設定しました。
customViewクラスはMyView
ですが、Interface BuilderにはMyClass
があります
修正する解決策-
MyView
Also顧客Designableを削除することにした場合は、
質問のタイトルに基づいて、わずかに異なる問題を抱えてここに来る人もいます(私がしたように)。もし、あんたが
その後、次のようなエラーが表示されることもあります
[カスタムビュー]でユーザー定義の検査済みプロパティ(xxx)を設定できませんでした...:このクラスはキー[xxx]のキー値コーディングに準拠していません。
解決策は、古いプロパティを削除することです。
クラスのIDインスペクターを開き、[ユーザー定義のランタイム属性]でプロパティ名を選択し、マイナスボタン(-)を押します。
繰り返しますが、これはOPの質問に対する答えではありませんが、ここに来る他の誰かの問題に対する答えかもしれません。