2014-03-06 46 views
3

我有一個奇怪的問題,讓我解釋一下:我使用[UITabBarItem appearance]更改我的應用程序中所有UITabBarItem的字體和顏色。這工作像一個魅力和所有UITabBarItem s正確的樣式。UITabBarItem:覆蓋子類中的默認外觀

的代碼是:

// Set the normal state 
[[UITabBarItem appearance] setTitleTextAttributes: 
@{ 
    UITextAttributeTextColor: AUIColorObject 
} forState:forState:UIControlStateHighlighted]; 

現在我要覆蓋樣式單一UITabBar。我擴展了我的UITabBar子類以處理類似樣式,在我的情況下,可能的值爲RootTabBarControllerStyleDefaultRootTabBarControllerStyleBox

我該如何設置TitleTextAttributes這個單一UITabBarItem?我使用子類型UITabBarControllerUITabBar作爲最大控制。

更詳細的,這是我的工作的解決方法:

1)UITabBar具有靜態方法來設置的外觀,這樣的:

+ (void)setAppearinaceForStyle:(RootTabBarControllerStyle)_style 
{ 
    [[UITabBarItem appearance] setTitleTextAttributes: 
    @{ 
     UITextAttributeTextColor: (_style == RootTabBarControllerStyleDefault ? UIColor1 : UIColor2) 
    } forState:UIControlStateHighlighted]; 
} 

2)然後我設置了委託我UITabBarController執行以下東西:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    [RootTabBar setAppearinaceForStyle:RootTabBarControllerStyleBox]; 

    [tabBarController.tabBar setNeedsDisplay]; 

    for (UITabBarItem *item in tabBarController.tabBar.items) 
    { 
     NSString *oldString = item.title; 

     // Change the title string to force a redraw 
     [item setTitle:[NSString stringWithFormat:@"%@ ", item.title]]; 

     // Set the title back to its default value 
     [item setTitle:oldString]; 
    } 

    [RootTabBar setAppearinaceForStyle:RootTabBarControllerStyleDefault]; 
} 

這樣我就可以設置不同的風格此單UITabBar,但我希望有AB etter /清潔的方式來做到這一點。

回答

0

的〔UIAppearance文檔】( https://developer.apple.com/library/ios/documentation/uikit/reference/UIAppearance_Protocol/Reference/Reference.html)指出:

使用UIAppearance協議來獲得的一類外觀代理。 您可以通過向外觀代理髮送 外觀修改消息來自定義類的實例的外觀。

注意:iOS在視圖進入窗口時應用外觀更改,它不會更改已存在於窗口中的視圖的外觀。 至 更改當前窗口中視圖的外觀,從視圖層次結構中刪除 視圖,然後將其放回

你應該玩弄視圖層次結構來移除包含tabbar並再次放置的視圖。然而,你的方法或多或少地做了相同的工作(因此稍微不那麼優雅)。

我認爲TE的結果將是,如果你遵循蘋果的doc

1

所以,你要進行不同的定製您的UITabBarItem的一個一樣的嗎?

如果是這樣,那麼您已經擁有該單個項目的子類,只需要我們[MyTabBarItemSubclass appearance]而不是用於其他項目的常規[UITabBarItem appearance]

+0

謝謝,這似乎是合法的。現在我有一堂課有兩種「風格」,我想我應該改變設計以符合你的模式。 –