2013-06-12 26 views
3

我期待主題我的iOS應用程序,並已閱讀UIAppearance。我希望用戶能夠在應用程序內切換許多不同的視覺主題。然後在用戶界面中顯示更改主題。使用UIAppearance和切換主題

我想我可以有一個主題文件,它是appDelegate.m中加載一個單身。但在此之後,我有點被困在如何實施?

+1

你可能會對UISS感興趣:https://github.com/robertwijas/UISS –

+0

之前沒有看到UISS,看起來像是在改變主題時也解決了重新加載問題。謝謝! – JMWhittaker

回答

8

UIKit在視圖添加到視圖層次結構後,從UIAppearance代理設置屬性。

UISS我用的方法是這樣的:

- (void)reloadAppearance { 
    NSArray * windows = [UIApplication sharedApplication].windows; 

    for (UIWindow *window in windows) { 
     for (UIView *view in window.subviews) { 
      [view removeFromSuperview]; 
      [window addSubview:view]; 
     } 
    } 
} 

另一個技巧是從主窗口中刪除RootViewController的,然後重新添加。儘管我更喜歡第一種解決方案,因爲它涵蓋了更廣泛的案例。

+0

我已經開始使用UISS並且很喜歡它。你會如何交換主題?只需重新加載一個不同的主題文件? – JMWhittaker

+1

UISS目前尚未正式支持主題。但是,您可以通過更改UISS.style.url並在UISS實例上調用reloadStyleAsynchronously來使其工作。 –

+0

出於某種原因,在iOS9中,這兩條建議都不適合我 –

0

羅伯特建議的解決方案不適用於我。我使用iOS9和UITabbarController。 這個建議是從回答工作的唯一here

它基本上說明了問題好了,當我們使用UIAppearance,它主要被應用,直到觀點不會改變再次重畫,不會特別是RootViewController的像UITabbarControllers發生和新的顏色只會有效果後,才應用從內存中刪除,並重新打開,如果你想立即改變,你就必須手動和設置每個屬性,使它象在附加鏈接中的答案描述

0

這個工作對我來說在斯威夫特:

let windows = UIApplication.sharedApplication().windows 
for window in windows { 
    for view in window.subviews { 
     view.removeFromSuperview() 
     window.addSubview(view) 
    } 
}