2013-01-16 37 views
0

我有一個想法,我想嘗試實施後:刷新標籤欄改變UIAppearence

基本上,我希望能夠使它容易被記錄並沒有區分在所記錄我應用。我的想法是,當用戶未登錄時,應用程序將在UIAppearence代理中設置背景顏色等。登錄後,這些值將通過更改UIAppearence設置進行更改。

我發現這種作品,但不是所有的UI元素都會在更改UIAppearence後刷新。最顯着的例子是我的UITabBarController中的標籤欄(這是我的窗口的rootViewController)。

在尋找這個問題的解決方案時,我發現了一些建議,需要調用layoutSubviewsdrawRect以便刷新視圖並採用對UIAppearence的更改。我已經嘗試了所有下面的沒有成功,但是,在我的應用程序委託:

[self.window.rootViewController.view setNeedsLayout] 
[self.window.rootViewController.view setNeedsDisplay] 

[self.tabbarController.tabBar setNeedsLayout] 
[self.tabbarController.tabBar setNeedsDisplay] 

[self.tabbarController.view setNeedsLayout] 
[self.tabbarController.view setNeedsDisplay] 

任何人有任何技巧或見解我怎麼可能會迫使標籤欄(和其他視圖)重繪?我在想,我只是想調用layoutSubviews一直沿着UIView層次結構,但如果是這樣,我還沒有找到一種方法來做到這一點。

回答

1

我已經使用KVO來通知我的自定義UITabBar。

我的訣竅是:

  1. 創建UITabBar子類
  2. 它鏈接到的UITabBarController在廈門國際銀行/故事板
  3. 添加觀察員對項目的創建(覆蓋 - (無效)setItems:(NSArray的*)的項目動畫:(BOOL)動畫)
  4. 手柄觀察者
+0

感謝您的回答。但是,我正在尋找特定於UIAppearance的內容。 –

3

UIAppearance屬性視圖添加到意見後設置hierarc HY。 再次觸發它的最簡單的技巧是分離關鍵窗口的rootViewController,然後重新附加它。您也可以刪除關鍵窗口的子視圖並再次添加它們。