iOS 利用通知改变背景和label的字体颜色

设计思路:
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 // 键盘动画的执行节奏(快慢)

通知和代理的关系

共同点:都可以完成界面间的通信
不同点:通知是一对多的关系,代理是一对一的关系
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,282评论 25 708
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,364评论 0 6
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 2,035评论 0 12
  • 1.写一个NSString类的实现 +(id)initWithCString:(c*****t char *)nu...
    韩七夏阅读 3,798评论 2 37
  • 明天该开全体会了,假期生活即将结束。 借机盘点一下,这个假期的喜乐与缺憾吧。 都说小孩子可爱,一点都不假!因为,做...
    小鹿says阅读 280评论 1 1