iOS开发技术分享iOS开发

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

2016-03-08  本文已影响1282人  e40c669177be

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

通知和代理的关系

共同点:都可以完成界面间的通信
不同点:通知是一对多的关系,代理是一对一的关系
上一篇下一篇

猜你喜欢

热点阅读