0

我可以使用外观代理为 iOS 中给定类型的所有控件设置属性。例如,我可以说:

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

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

让我所有的工具栏按钮都使用 Futura 字体。

我有自己的自定义控件,它是 UIControl 的子类。有什么方法可以使用相同的技术来设置我的控件独有的一些自定义属性?否则,它会直接遍历应用程序设置属性中的每个实例。问题是,如何像外观代理一样创建自己的属性代理?

我可以想象设置一个单例来保存我关心的属性,然后让我的控件调用它来获取它们的值。这似乎很难处理我想将某些实例的属性设置为与全局默认值不同的情况,就像我可以使用上面的一两个 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 回答