ios NSNotificationCenter通知的简单使用

通知类本身比较简单,大概就分为注册通知监听器、发送通知,注销通知监听器三个方法;通知中心(NSNotificationCenter)采用单例的模式,整个系统只有一个通知中心,通过如下代码获取:

//获取通知中心
[NSNotificationCenter defaultCenter];

注册通知监听器方法:

//observer为监听器
//aSelector为接到收通知后的处理函数
//aName为监听的通知的名称
//object为接收通知的对象,需要与postNotification的object匹配,否则接收不到通知
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(nullable NSNotificationName)aName object:(nullable id)anObject;

发送通知的方法:

//需要手动构造一个NSNotification对象
- (void)postNotification:(NSNotification *)notification;

//aName为注册的通知名称
//anObject为接受通知的对象,通知不传参时可使用该方法
- (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject;

//aUserInfo为将要传递的参数,类型为字典类型
//通知需要传参数时使用下面这个方法,其他同上。
- (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject userInfo:(nullable NSDictionary *)aUserInfo;

注销通知监听器方法:

//删除通知的监听器
- (void)removeObserver:(id)observer;
//删除通知的监听器,aName监听的通知的名称,anObject监听的通知的发送对象
- (void)removeObserver:(id)observer name:(nullable NSNotificationName)aName object:(nullable id)anObject;
//以block的方式注册通知监听器
- (id <NSObject>)addObserverForName:(nullable NSNotificationName)name object:(nullable id)obj queue:(nullable NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *note))block API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));

使用情况:

NSNotificationCenter类一般用于一个对象传递事件给另外一个对象,在另一个对象中触发某些方法,可以实现跨视图的交互。我在最近一个月内用到了两次NSNotificationCenter类。

①在对项目进行国际化时,在切换语言时采用通知的方式,使其他界面进行刷新(需要在主线程内)。

②使用SGPagingView时,需要实现pageContentView中的内容在多选状态时,pageTitleView禁止进行切换的功能。看了SGPagingView提供的方法是没有这个的,所以就采用了NSNotificationCenter。在进入多选状态时发一条通知,在退出多选状态时发一条通知(方法比较简陋,如果有更好的方法请不吝赐教)。

//注册通知监听器
  [NotifyUtil addNotify:NOTIFY_DISABLE_SWITCH Observer:self selector:@selector(disableSwitch) Object:nil];
  [NotifyUtil addNotify:NOTIFY_ALLOW_SWITCH Observer:self selector:@selector(allowSwitch) Object:nil];

//调用方法

//禁止pageTitleView进行切换
-(void)disableSwitch{
  self.pageTitleView.userInteractionEnabled = NO;
}
//允许pageTitleView进行切换
-(void)allowSwitch{
  self.pageTitleView.userInteractionEnabled = YES;
}

//注销通知监听器
- (void) dealloc{
  [NotifyUtil removeNotify:NOTIFY_DISABLE_SWITCH Observer:self];
  [NotifyUtil removeNotify:NOTIFY_ALLOW_SWITCH Observer:self];
}

注:用NotifyUtil对NSNotificationCenter类进行了一个简单的封装,参数基本都一致,就不贴NotifyUtil的代码了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • iOS NSNotificationCenter通知中心使用小结

    前言 最近公司组织两个星期的新人培训,事情安排的满满的,周末都没有.说好的一个星期一更新的博客中断了,让大家久等了,现在培训结束,终于又可以安安静静的做一个程序员了,好开心... 一.NSNotification和Delegate的联系和区别 众所周知,IOS中经常会使用到NSNotification和delegate来进行一些类之间的消息传递.言归正传,这两种有什么区别呢? NSNotification就是IOS提供的一个消息中心,由一个全局的defaultNotification管理应用中的

  • ios NSNotificationCenter通知的简单使用

    通知类本身比较简单,大概就分为注册通知监听器.发送通知,注销通知监听器三个方法:通知中心(NSNotificationCenter)采用单例的模式,整个系统只有一个通知中心,通过如下代码获取: //获取通知中心 [NSNotificationCenter defaultCenter]: 注册通知监听器方法: //observer为监听器 //aSelector为接到收通知后的处理函数 //aName为监听的通知的名称 //object为接收通知的对象,需要与postNotification的ob

  • IOS 远程通知兼容(IOS7,IOS8)实例详解

    IOS 远程通知 1.证书推送安装 证书的操作过程我就不说了,网上一大堆,首先我要说一下为什么要这些证书其实就是告诉苹果服务器三点: 1.我们要为哪个应用做推送 2.哪台电脑上做推送调试 3.哪台手机设备上做推送调试 我把调试做了高亮,因为总有人问为什么我要在mac上双击安装cer文件和mobileprovision文件,就是因为你要调试,如果你不调试你可以生成后不安装. 2.代码实现 - (BOOL)application:(UIApplication *)application didFin

  • iOS 微信分享功能简单实现

    PS:此文以简单实现功能为主,不足之前还望指点,大神勿喷. 在此之前如何申请微信认证的Key就不说了,公司一般会有人搞(自己申请一个也非常的简单) 1.首先下载微信SDK:微信SDK下载地址(更多关于微信SDK信息文档请访问官方网站:微信开放平台) 2.导入微信SDK 将下载下来的SDKExport文件夹导入到工程,其中包含3个核心文件libWeChatSDK.a WXApi.h WXApiObject.h(强烈建议大家看看read-me文件) 3.在工程Build Phases -> Link

  • iOS表情键盘的简单实现代码

    最近用到了表情键盘就去网上找了下,感觉网上的都是为了更大的需求写的,而我并不需要所以就自己写了个简单的实现. 1.用到的表情字符串是从Emojiplist文件里获取到的; 2.需要添加一个观察者: [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; - (void)ke

  • iOS本地推送简单实现代码

    本文为大家分解介绍了iOS本地推送代码的三步骤,供大家参考,具体内容如下 第一步:创建本地推送 // 创建一个本地推送 UILocalNotification *notification = [[[UILocalNotification alloc] init] autorelease]; //设置10秒之后 NSDate *pushDate = [NSDate dateWithTimeIntervalSinceNow:10]; if (notification != nil) { // 设置推

  • iOS指纹识别的简单应用

    指纹识别(Touch ID)的简单应用,供大家参考,具体内容如下 1.调用 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self setupNotification]; UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(100, 100,

  • iOS使用 CABasicAnimation 实现简单的跑马灯(无cpu暴涨)

    网上找了几个,但都有cup暴涨的情况发生,于是利用CABasicAnimation 简单的实现一个跑马灯,实现简单,可自己定制 #import <UIKit/UIKit.h> @interface LoopView : UIView @property(nonatomic,strong)NSString *Iformation; @property(nonatomic,strong)NSString *Image; @end #import "LoopView.h" #im

  • iOS瀑布流的简单实现(Swift)

    这段时间突然想到一个很久之前用到的知识-瀑布流,本来想用一个简单的方法,发现自己走入了歧途,最终只能狠下心来重写UICollectionViewFlowLayout.下面我将用两种方法实现瀑布流,以及会介绍第一种实现的bug. <1>第一种 效果图如下所示: 这种实现方法的思路: 1)首先调用随机函数,产生随机高度,并把它保存到数组中 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollection

  • iOS中的通知机制

    网上经常说iOS的通知机制是使用了观察者模式,里面有两个角色,其一是poster(发送者),另一个是observer(接受信息的订阅者).但我认为重要的角色是通知中心,它是整个通知机制的核心,有poster发送者发送的消息必定要到达通知中心,再由通知中心根据这个消息被哪些observer订阅者订阅过,就把消息往那些订阅者去分发.整体可以与现在的电子邮件结构作类比的. 但要额外说明一下,iOS的通知虽然也叫Notification通知,但是与Android中的通知是不一样的,在Android中的通

随机推荐