0

IB_designable を調べてみましたが、これは本当に素晴らしい機能です。ただし、私が抱えている問題の 1 つは、ビューごとに UIView をサブクラス化する必要があることです。そのサブクラス内で、initWithCoder: メソッドと prepareForInterfaceBuilder: 内の UI 要素を指定する必要があります。

ただし、クラスの外側の UI 要素を指定できるようにしたいと考えています。

外部から設定してInterfaceビルダーで見ることができるパブリックプロパティを持つUIViewサブクラスを作りたいです。

これは可能ですか?

アップデート:

IBInspectible を認識しています。これにより、属性インスペクターでプロパティを使用できるようになります。これは、外部とは言いません。

IB_DESIGNABLE
@interface DesignableLabel : UILabel
@end
@implementation DesignableLabel 
@end

@interface SomeClass : UIViewController {
    IBOutlet DesignableLabel *DL;
}
@end
@interface SomeClass
- (void)prepareForInterfaceBuilder {
    DL.text = @"Hello World"
}
@end

DesignableLable は UILabel のサブクラスです。UILabels には text プロパティがあります。SomeClass にそのプロパティを何らかの形で設定してもらいたい。通常、それを行ってアプリを実行すると、文字列が表示されるはずです。ただし、アプリを実行する手間を省くために、Interface builder に表示して、入力時にその値を確認できるようにしたいと考えています。

4

2 に答える 2

0

他の人が利益を得ることができるように、私は自分の質問に答えます。ユーザー定義ランタイム属性を使用してカテゴリ メソッドを呼び出し、外部から IB_Designable オブジェクトを設定できます。

IB_DESIGNABLE
@interface DesignableLabel : UILabel
@end

@implementation DesignableLabel 
@end

@implementation DesignableLabel (Runtime_TheTextYouWant)
    - (void)setTheText:(BOOL)b {
        if (!b) return;
        self.text = "The text you want";
    }
@end

@implementation DesignableLabel (Runtime_SayHelloToMyLittleFriend)
    - (void)setMyLittleFriend:(BOOL)b {
        if (!b) return;
        self.text = "Say hello to my little friend";
    }
@end

DesignableLabel 用に 2 つのカテゴリを作成しました。ここで、2 つの UILabels をストーリーボードの ViewController に配置し、両方の UILabel を DesignableLabel にサブクラス化すると、最初の UILabel に対して、キー パスを呼び出すことでユーザー定義のランタイム属性を使用できます。

theText

ブール型で、チェックマークを設定します。次に、その特定の DesignableLabel オブジェクトには、setTheText: カテゴリ メソッドで指定されたテキストが含まれます。

同様に、2 番目の DesignableLabel オブジェクトについては、キー パスを呼び出してユーザー定義のランタイム属性を使用します。

myLittleFriend

キー パスでは「set」という単語が使用されておらず、最初の単語が小文字になっていることに注意してください。setMyLittleFriend: myLittleFriend になります。

結論として、これにより、IB_DESIGNABLE オブジェクトごとにサブクラスを作成する必要がなくなります。

于 2015-04-14T18:02:09.690 に答える
0

外部で (パブリック API を使用して) 設定するパブリック プロパティは、IBInspectableキーワードでマークする必要があります。元:

 @property (readwrite) IBInspectable BOOL activityIndicatorOn;

このキーワードの詳細については、Apple の Web サイトを参照してください。

于 2015-02-08T20:09:01.213 に答える