我期待主題我的iOS應用程序,並已閱讀UIAppearance。我希望用戶能夠在應用程序內切換許多不同的視覺主題。然後在用戶界面中顯示更改主題。使用UIAppearance和切換主題
我想我可以有一個主題文件,它是appDelegate.m中加載一個單身。但在此之後,我有點被困在如何實施?
我期待主題我的iOS應用程序,並已閱讀UIAppearance。我希望用戶能夠在應用程序內切換許多不同的視覺主題。然後在用戶界面中顯示更改主題。使用UIAppearance和切換主題
我想我可以有一個主題文件,它是appDelegate.m中加載一個單身。但在此之後,我有點被困在如何實施?
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的,然後重新添加。儘管我更喜歡第一種解決方案,因爲它涵蓋了更廣泛的案例。
我已經開始使用UISS並且很喜歡它。你會如何交換主題?只需重新加載一個不同的主題文件? – JMWhittaker
UISS目前尚未正式支持主題。但是,您可以通過更改UISS.style.url並在UISS實例上調用reloadStyleAsynchronously來使其工作。 –
出於某種原因,在iOS9中,這兩條建議都不適合我 –
羅伯特建議的解決方案不適用於我。我使用iOS9和UITabbarController。 這個建議是從回答工作的唯一here
它基本上說明了問題好了,當我們使用UIAppearance,它主要被應用,直到觀點不會改變再次重畫,不會特別是RootViewController的像UITabbarControllers發生和新的顏色只會有效果後,才應用從內存中刪除,並重新打開,如果你想立即改變,你就必須手動和設置每個屬性,使它象在附加鏈接中的答案描述
這個工作對我來說在斯威夫特:
let windows = UIApplication.sharedApplication().windows
for window in windows {
for view in window.subviews {
view.removeFromSuperview()
window.addSubview(view)
}
}
你可能會對UISS感興趣:https://github.com/robertwijas/UISS –
之前沒有看到UISS,看起來像是在改變主題時也解決了重新加載問題。謝謝! – JMWhittaker