0

外観プロキシを使用して、iOS で特定のタイプのすべてのコントロールのプロパティを設定できます。たとえば、次のように言えます。

UIFont *futura = [UIFont fontWithName:@"Futura" size:13];
NSDictionary *attributes = [NSDictionary dictionaryWithObject:futura forKey:UITextAttributeFont];

[[UIBarButtonItem appearance] setTitleTextAttributes:attributes forState:UIControlStateNormal];

すべてのツールバー ボタンが Futura フォントを使用するようにします。

UIControl のサブクラスである独自のカスタム コントロールがあります。同じ手法を使用して、コントロールに固有のカスタム プロパティを設定する方法はありますか? それ以外の場合は、プロパティを直接設定するアプリ内のすべてのインスタンスを反復処理します。問題は、外観プロキシのような独自のプロパティ プロキシを作成するにはどうすればよいかということです。

気になるプロパティを保持するシングルトンを設定し、コントロールがこれを呼び出して値を取得することを想像できます。上記の 1 つまたは 2 つの UIBarButtonItems でできるように、特定のインスタンスのプロパティをグローバルな既定値とは異なる方法で設定したい場合を処理するのが難しくなるようです。そのため、新しいインスタンスがそれぞれプロキシに登録される場所になるため、プロキシは設定が変更された場合にそれらに通知できます...しかし、もっと良い方法があるのではないかと思いますか? これは複雑に思えます。

4

1 に答える 1

0

のドキュメントを確認してくださいUIAppearanceContainer。サブクラスをプロトコルに準拠させ、ヘッダー ファイルでUIAppearanceContainerアクセサーをマークすることができます。UI_APPEARANCE_SELECTORのメソッド宣言の例UIBarButtonItemは次のようになります。

@property(nonatomic,retain) UIColor *tintColor UI_APPEARANCE_SELECTOR;

- (UIImage *)backButtonBackgroundImageForState:(UIControlState)state
         barMetrics:(UIBarMetrics)barMetrics UI_APPEARANCE_SELECTOR;
- (void)setBackButtonBackgroundImage:(UIImage *)backgroundImage
    forState:(UIControlState)state
    barMetrics:(UIBarMetrics)barMetrics UI_APPEARANCE_SELECTOR;
于 2012-10-10T23:07:53.857 に答える