2012-10-10 70 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; 
相關問題