iOS 学会使用通知(notification)

本文通过一个具体的示例演示了如何利用iOS的通知中心实现跨界面的数据传递。从FirstViewController注册观察者开始,经过SecondViewController的过渡,最终在ThirdViewController触发通知,完成对FirstViewController中弹窗事件的回调。
摘要由CSDN通过智能技术生成

继之间我们讲的delegate和block之后,今天我们一块来研讨一下notification,在实际开发中,我一般很少用到通知,因为如果项目中大量用到通知的话,就会大大降低效率,除非万不得已,跨界面之间的传递,因为notificationcenter就是一个单例,所以可以全局使用,也就是说只有在这个时候,我才会用到通知,下边我给一个demo,具体实现的现象就是我创建了三个controller,firstViewController,secondViewController,ThirdViewController,其中第二个界面就是一个起一个push的效果,为了能清晰的证明,通知可以跨界面之间进行传值(传事件),在firstViewController中注册一个观察者,并写一个弹窗事件,在thirdViewController中发送通知(在这点需要注意,那就是通知的名字一定一致,不然,肯定thirdViewController在发送通知的时候是找不到对应通知的,也就不会有回调事件了),(在需要做事情的地方发送通知,谁可以来做这件事情,谁就注册一个观察者来帮助发送这个通知的人实现这个事件),好了,就是这样,下边是demo:

firstViewController.m

#import "FirstViewController.h"

#import "SecondViewController.h"


@interfaceFirstViewController ()


@end


@implementation FirstViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    self.view.backgroundColor = [UIColorbrownColor];

    UIButton *button = [UIButtonbuttonWithType:UIButtonTypeSystem];

    button.frame =CGRectMake(50,100,200, 50);

    button.backgroundColor = [UIColorredColor];

    [buttonsetTitle:@"push"forState:UIControlStateNormal];

    [buttonaddTarget:selfaction:@selector(btnClick:)forControlEvents:UIControlEventTouchUpInside];

    [self.viewaddSubview:button];

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(showNotification:)name:@"notDemo"object:nil];

}


- (void)showNotification:(NSNotification *)notification {

    UIAlertController *alert = [UIAlertControlleralertControllerWithTitle:@"title"message:@"message"preferredStyle:UIAlertControllerStyleAlert];

    [alertaddAction:[UIAlertActionactionWithTitle:@"OK"style:UIAlertActionStyleDefaulthandler:nil]];

    [selfpresentViewController:alertanimated:YEScompletion:nil];

}


- (void)btnClick:(UIButton *)sender {

    SecondViewController *second = [[SecondViewControlleralloc]init];

    [self.navigationControllerpushViewController:secondanimated:YES];

}


@end



secondVIewController.m

#import "SecondViewController.h"

#import "ThirdViewController.h"


@interfaceSecondViewController ()


@end


@implementation SecondViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    self.view.backgroundColor = [UIColorcolorWithRed:0.5green:0.6blue:0.2alpha:YES];

    UIButton *button = [UIButtonbuttonWithType:UIButtonTypeSystem];

    button.frame =CGRectMake(50,100,200, 50);

    button.backgroundColor = [UIColorredColor];

    [buttonsetTitle:@"push"forState:UIControlStateNormal];

    [buttonaddTarget:selfaction:@selector(btnClick:)forControlEvents:UIControlEventTouchUpInside];

    [self.viewaddSubview:button];

}


- (void)btnClick:(UIButton *)sender {

    ThirdViewController *third = [[ThirdViewControlleralloc]init];

    [self.navigationControllerpushViewController:thirdanimated:YES];

}


@end



thirdViewController.m

#import "ThirdViewController.h"


@interfaceThirdViewController ()


@end


@implementation ThirdViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    self.view.backgroundColor = [UIColorcolorWithRed:0.2green:0.6blue:0.5alpha:YES];

    UIButton *button = [UIButtonbuttonWithType:UIButtonTypeSystem];

    button.frame =CGRectMake(50,100,200, 50);

    button.backgroundColor = [UIColorredColor];

    [buttonsetTitle:@"send notification"forState:UIControlStateNormal];

    [buttonaddTarget:selfaction:@selector(btnClick:)forControlEvents:UIControlEventTouchUpInside];

    [self.viewaddSubview:button];

}


- (void)btnClick:(UIButton *)sender {

    

    [[NSNotificationCenterdefaultCenter]postNotificationName:@"notDemo"object:niluserInfo:nil];

}


@end


好了,demo就是上边的,在第三个界面发送通知,回调第一个界面的弹窗事件。

但是使用通知就是不如代理,block那么直观,不利于代码的维护,项目中我是尽量少用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值