设计思路:
1.准备两套资源,分别对应日间模式和夜间模式
2.定义一个全局变量(islong),用来监控用户的操作
3.加入通知中心,用来改变全局变(islong)的值
4.在界面中判断全局变量的bool值,判断使用那套资源
//设置系统全局变量
@property (nonatomic, assign) BOOL isLong;
//UILabel的字体颜色
- (void)viewDidLoad {
[super viewDidLoad];
//注册 通知中心监听者(observe)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeValue:) name:@"change" object:nil];
}
- (IBAction)changeColorAction:(UIButton *)sender {
//发送通知 name:通知的名称 objc:通知的发布者 userInfo:一些额外的消息(通知发布者传递给接收者的信息内容)
[[NSNotificationCenter defaultCenter] postNotificationName:@"change" object:nil userInfo:nil];
}
-(void)changeValue:(NSNotification *)sender{
if (self.view.backgroundColor == [UIColor whiteColor] ) {
((AppDelegate *)[UIApplication sharedApplication].delegate).isLong = 0;
self.view.backgroundColor = [UIColor blackColor];
self.label.textColor = [UIColor whiteColor];
}else{
((AppDelegate *)[UIApplication sharedApplication].delegate).isLong = 1;
self.view.backgroundColor = [UIColor whiteColor];
self.label.textColor = [UIColor blackColor];
}
}
在viewController.m里面调用
- (void)viewDidLoad {
[super viewDidLoad];
//注册 接收消息 找到通知中心,接收消息
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeValue:) name:@"change" object:nil];
}
- (IBAction)changeColorAction:(UIButton *)sender {
//发送通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"change" object:nil userInfo:nil];
}
-(void)changeValue:(NSNotification *)sender{
if (self.view.backgroundColor == [UIColor whiteColor] ) {
((AppDelegate *)[UIApplication sharedApplication].delegate).isLong = 0;
self.view.backgroundColor = [UIColor blackColor];
self.label.textColor = [UIColor whiteColor];
}else{
((AppDelegate *)[UIApplication sharedApplication].delegate).isLong = 1;
self.view.backgroundColor = [UIColor whiteColor];
self.label.textColor = [UIColor blackColor];
}
}
//通知中心不会保留(retain)监听器对象, 在通知中心注册过的对象 ,必须在该对象释放前取消注册. 否则, 当相应的通知再次出现时, 通知中心仍然会向该监听器发送消息. 因为, 相应的监听器对象已经被释放了, 所以可能会导致应用崩溃 .
-(void)dealloc{
//[super dealloc]; 在mac下需要调用此句
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
键盘通知
键盘状态改变的时候 , 系统会发出一些特定的通知
UIKeyboardWillShowNotification // 键盘即将显示
UIKeyboardDidShowNotification // 键盘显示完毕
UIKeyboardWillHideNotification // 键盘即将隐藏
UIKeyboardDidHideNotification // 键盘隐藏完毕
UIKeyboardWillChangeFrameNotification // 键盘的位置尺寸即将发生改变
UIKeyboardDidChangeFrameNotification // 键盘的位置尺寸改变完毕
系统发出键盘通知时, 会附带一下跟键盘有关的额外信息(字典),字典常见的key如下:
UIKeyboardFrameBeginUserInfoKey // 键盘刚开始的frame
UIKeyboardFrameEndUserInfoKey // 键盘最终的frame(动画执行完毕后)
UIKeyboardAnimationDurationUserInfoKey // 键盘动画的时间
UIKeyboardAnimationCurveUserInfoKey // 键盘动画的执行节奏(快慢)
网友评论