2012-10-10 29 views
0

我可以使用外观代理来设置iOS中给定类型的所有控件的属性。例如,我可以这样说:如何在Cocoa Touch中创建等效的外观代理

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

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

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

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

我可以想象设置一个单例来保存我关心的属性,然后让我的控件调用它来获取它们的值。这似乎使我很难处理这种情况,我想将某些实例的属性设置为与全局默认属性不同,因为我可以使用上面的一个或两个UIBarButtonItems。因此,然后变成一个地方,每个新的实例注册自己的代理,所以代理可以通知他们的设置,如果他们改变......但现在我想知道是否有更好的方法?这看起来很复杂。

回答

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; 
相关问题