美文网首页iOS开发技术分享iOS开发
iOS 利用通知改变背景和label的字体颜色

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

作者: e40c669177be | 来源:发表于2016-03-08 10:10 被阅读1282次

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

    通知和代理的关系

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

    相关文章

      网友评论

        本文标题:iOS 利用通知改变背景和label的字体颜色

        本文链接:https://www.haomeiwen.com/subject/gdxzkttx.html