使用UIAppearance和切换主题

我正在寻找主题我的iOS应用程序,并已阅读UIAppearance。 我希望用户能够在应用程序内切换许多不同的视觉主题。 然后,UI中将显示更改主题。

我想我可以在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并再次添加。 虽然我更喜欢第一种解决方案,因为它涵盖了更广泛的案例。

这适用于Swift:

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

罗伯特建议的解决方案对我不起作用。 我正在使用iOS9和UITabbarController。 这个建议是唯一有效的答案

它基本上解释了这个问题,当我们使用UIAppearance时,它基本上是应用的,并且在重新绘制视图之前不会改变,特别是对于像UITabbarControllers这样的rootViewController,新的颜色只会在应用程序从内存中删除后生效并再次打开,如果你想立即改变,你将不得不手工制作并设置每个属性,如附件中的答案中所述

迅捷4:

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