zoukankan      html  css  js  c++  java
  • 通知中心(以夜间模式为例)

    1.     通知中心概述
    通知中心实际上是在程序内部提供了消息广播的一种机制。通知中心不能在进程间进行通信。实际上就是一个二传手,把接收到的消息,根据内部的一个消息转发表,来将消息转发给需要的对象。通知中心是基于观察者模式的,它允许注册、删除观察者。
    一个NSNotificationCenter可以有许多的通知消息NSNotification,对于每一个NSNotification可以有很多的观察者Observer来接收通知。
    2.     通知中心两个重要的类
    NSNotificationCenter:这是iOS中通知中心的灵魂,由该类实现了观察者模式,并给开发者提供了诸如注册、删除观察者的接口,我们可以通过一个单例来获得它的实例(注,一个程序内部只有一个NSNotificationCenter实例对象)。
    NSNotification:这是消息携带的载体,通过它,可以把消息内容传递给观察者。其中:name对应消息名称标示。object一般是发送者本身、dictionary则是传递的消息内容。
    3.     通知中心如何使用
    通知中心的使用可以分为4个步骤。
    这里需要额外提一点的是:发送消息不仅仅可以有用户发起,也可以是系统发起。
    当我们注册了某个消息的观察者后,如果有了对应的消息,则观察者会收到相应的消息,并展开处理。这里需要注意的是,当使用完消息之后,不想在接收到消息,则需要把观察者移除,否则会出现错误。

    注册通知:即要在什么地方接受消息
    [[NSNotificationCenter defaultCenter]  addObserver:self selector:@selector (mytest:) name:@" postData " object:nil];
    参数介绍:
    addObserver:观察者,即在什么地方接收通知;
    selector:收到通知后调用何种方法,即回调函数;
    name:通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。
    发送通知:调用观察者处的方法。
    [[NSNotificationCenter defaultCenter] postNotificationName:@" postData " object:searchFriendArray];

    __________________________________________________________________________________________________

    夜间模式:(用通知实现)
    //发送一个通知
    NSNumber *num = [NSNumber numberWithBool:s.isOn];//开关的状态

    //创建一个通知,通知的名字是  change  ,通知的参数num 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"change" object:num];

    __________________________________________________________________________________________________

    //注册通知,成为通知的监听者
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeColor:) name:@"change" object:nil];//---------通知中心,设置夜间模式

     //实现通知的方法
    -(void)changeColor:(NSNotification *)note{

     NSNumber *n = note.object;//把通知的参数赋值给NSNuber接收
     BOOL flag = [n boolValue];//把通知的参数强转为BOOL类型
    if (flag) {//对通知的参数进行判读,如果是1,该怎样......
    self.view.backgroundColor = [UIColor grayColor];
    UIButton *t = (UIButton *)[self.view viewWithTag:2];
    [t setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
     t.backgroundColor = [UIColor grayColor];


    }else{//对通知的参数进行判读,如果是0,该怎样......
    self.view.backgroundColor = [UIColor whiteColor];
    UIButton *t = (UIButton *)[self.view viewWithTag:2];
    [t setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    t.backgroundColor = [UIColor whiteColor];
    }

    话说夜间模式用通知设置有Bug,需要给每一个控制器设置,比较麻烦。设置夜间模式最好用NSUserdefault(偏好设置)设置。

  • 相关阅读:
    下载安装ngnix
    微信小程序富文本中的图片大小超出屏幕
    微信小程序跳转(当我们不知道是普通页面还是tabbar)
    查看每年用量最多技术框架
    vue.js--遇到的一些错误
    vue-router(配置子路由--单页面多路由区域操作)
    webpack配置文件--(loader)
    webpack配置(入口出口)
    数组排序
    2021年12种高级UX/UI设计趋势
  • 原文地址:https://www.cnblogs.com/yibadao/p/5059603.html
Copyright © 2011-2022 走看看