夜间模式:利用继承与NSUserDefaults
1.创建基类,负责夜间模式的转换
2.所有的类都继承于基类,基类的模式改变了,所有子类的模式也改变了
3.夜间模式触发的按钮发送通知
4.利用NSUserDefault把模式保存到本地
/*************基类.h***************/
#import
"BaseViewController.h"
@interface BaseViewController ()
@end
@implementation BaseViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//父亲默认颜色
self.view.backgroundColor = [UIColor redColor];
self.navigationController.navigationBar.barTintColor = [UIColor greenColor];
//注册通知
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(changeColor:) name:@"changeColor" object:nil];
//判断模式
NSString *str = [[NSUserDefaults standardUserDefaults]objectForKey:@"night"];
if ([str isEqualToString:@"yes"]) {
self.view.backgroundColor = [UIColor lightGrayColor];
self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
}
}
//接受通知触发的方法
-(void)changeColor:(NSNotification *)notification
{
NSString *str = [[NSUserDefaults standardUserDefaults]objectForKey:@"night"];
if ([str isEqualToString:@"yes"]) {
self.view.backgroundColor = [UIColor lightGrayColor];
self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
}else
{
self.view.backgroundColor = [UIColor redColor];
self.navigationController.navigationBar.barTintColor = [UIColor greenColor];
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
@interface BaseViewController ()
@end
@implementation BaseViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//父亲默认颜色
self.view.backgroundColor = [UIColor redColor];
self.navigationController.navigationBar.barTintColor = [UIColor greenColor];
//注册通知
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(changeColor:) name:@"changeColor" object:nil];
//判断模式
NSString *str = [[NSUserDefaults standardUserDefaults]objectForKey:@"night"];
if ([str isEqualToString:@"yes"]) {
self.view.backgroundColor = [UIColor lightGrayColor];
self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
}
}
//接受通知触发的方法
-(void)changeColor:(NSNotification *)notification
{
NSString *str = [[NSUserDefaults standardUserDefaults]objectForKey:@"night"];
if ([str isEqualToString:@"yes"]) {
self.view.backgroundColor = [UIColor lightGrayColor];
self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
}else
{
self.view.backgroundColor = [UIColor redColor];
self.navigationController.navigationBar.barTintColor = [UIColor greenColor];
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
/*************基类.h***************/
/*************夜间模式触发的按钮***************/
UIButton
*button = [UIButton
buttonWithType:UIButtonTypeCustom];
[self.view addSubview:button];
button.frame = CGRectMake(100, 100, 200, 40);
button.backgroundColor = [UIColor blackColor];
[button addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
}
-(void)buttonAction
{
NSString *str = [[NSUserDefaults standardUserDefaults]objectForKey:@"night"];
if ([str isEqualToString:@"yes"]) {
[[NSUserDefaults standardUserDefaults] setObject:@"no" forKey:@"night"];
[[NSNotificationCenter defaultCenter]postNotificationName:@"changeColor" object:@"no"];
}else
{
[[NSUserDefaults standardUserDefaults] setObject:@"yes" forKey:@"night"];
[[NSNotificationCenter defaultCenter]postNotificationName:@"changeColor" object:@"yes"];
}
[self.view addSubview:button];
button.frame = CGRectMake(100, 100, 200, 40);
button.backgroundColor = [UIColor blackColor];
[button addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
}
-(void)buttonAction
{
NSString *str = [[NSUserDefaults standardUserDefaults]objectForKey:@"night"];
if ([str isEqualToString:@"yes"]) {
[[NSUserDefaults standardUserDefaults] setObject:@"no" forKey:@"night"];
[[NSNotificationCenter defaultCenter]postNotificationName:@"changeColor" object:@"no"];
}else
{
[[NSUserDefaults standardUserDefaults] setObject:@"yes" forKey:@"night"];
[[NSNotificationCenter defaultCenter]postNotificationName:@"changeColor" object:@"yes"];
}
}
/*************夜间模式触发的按钮***************/
本文介绍了一种使用Objective-C实现应用程序夜间模式切换的方法。通过创建基类来统一管理UI的颜色变化,并利用NSNotification进行通知传递,使得所有继承自基类的视图控制器能够响应模式的变化。此外,还介绍了如何通过UIButton触发模式切换并利用NSUserDefaults保存用户的选择。
2328

被折叠的 条评论
为什么被折叠?



