iOS应用中的昼夜模式

iOS应用中的昼夜模式,ios,objective-c,uiappearance,Ios,Objective C,Uiappearance,目前,我正在开发基于文章的应用程序。它具有日间/夜间阅读模式功能。对于夜间模式,应用程序背景颜色应为黑色,前景组件应为白色。我已经为UIView、UILabel、UIButton和UIExtView创建了类别,但我不知道这是否是正确的方法。请给我提个建议 如何在iOS应用程序中实现/实施昼夜模式 我认为您最好使用外观代理,而不是类别。任何子类UIView(基本上是任何UI)都将向您公开这一点 只需将这些设置为所需的外观,默认情况下,所有元素都将继承这些设置。以以下为例: [[UIButton a

目前,我正在开发基于文章的应用程序。它具有日间/夜间阅读模式功能。对于夜间模式,应用程序背景颜色应为黑色,前景组件应为白色。我已经为UIView、UILabel、UIButton和UIExtView创建了类别,但我不知道这是否是正确的方法。请给我提个建议


如何在iOS应用程序中实现/实施昼夜模式

我认为您最好使用外观代理,而不是类别。任何子类
UIView
(基本上是任何UI)都将向您公开这一点

只需将这些设置为所需的外观,默认情况下,所有元素都将继承这些设置。以以下为例:

[[UIButton appearance] setBackgroundColor:[UIColor blackColor]];
[[UIButton appearance] setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
默认情况下,所有UIButton现在都具有这些属性


您只需在应用程序在一天中的某个时间启动时执行检查,然后根据此设置UI的外观。

如果您这样做,例如:
UILabel.appearance().textColor=UIColor.white
,这很好。 只是不要忘记在黑暗模式启用时设置UserDefaults键,这样当重新启动应用程序时,它将保持以前的外观。此外,您可能希望将导航控制器、选项卡栏和键盘设置为黑色,将导航控制器和选项卡栏的状态栏元素和标题设置为白色(在AppDelegate中,didFinishLaunchingWithOptions:

UINavigationBar.appearance().barTintColor = UIColor.black
UIApplication.shared.statusBarStyle = .lightContent
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
UITabBar.appearance().barTintColor = UIColor.black

我通过制作一个外观管理器实现了类似的行为,它可以配置不同的颜色方案。在它中我有如下功能:

-(UIColor*)标签主屏幕的颜色;
在此之后,您将需要一个用户默认值来保持当前的配色方案,以及在用户更改配色方案后重新加载屏幕的方法(触发通知,因为它的一对多关系是一个不错的选择)

这种方法的一个优点是,它可以很容易地通过新的配色方案进行扩展。

您可以使用此链接