登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

查看: 38|回复: 6

iOS NSNotificationCenter的简单使用,ios使用技巧

[复制链接]

203

主题

204

帖子

868

金钱

手工艺人

发表于 2018-1-11 14:45:07 | 显示全部楼层 |阅读模式

        

        在工程的两个地方注册通知, 一个是AppDelegate, 模拟后台接受通知的处理, 一个是ViewController, 模拟UI接受通知的处理. 在另一个界面SecondViewController中设置一个按钮事件, 模拟通知的触发.

        

        界面准备:

        AppDelegate.m

        

[Java] 查看源文件 复制代码
- (BOOL)application: (UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    ViewController *vc = [[ViewController alloc] init];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
    self.window.rootViewController = nav;
    [self.window makeKeyAndVisible];
    return YES;
}


ViewController中有一个button(进入下一页)和一个label(显示通知内容)

        

        

[Java] 查看源文件 复制代码
    UIButton *btn = [UIButton buttonWithType: (UIButtonTypeCustom)];
    [btn setTitle:#进入下一页 forState: (UIControlStateNormal)];
    [btn setTitleColor:[UIColor blackColor] forState: (UIControlStateNormal)];
    btn.frame = CGRectMake(100, 100, 200, 30);
    [btn addTarget:self action:#selector(btnAction: ) forControlEvents: (UIControlEventTouchUpInside)];
    [self.view addSubview:btn];


[Java] 查看源文件 复制代码
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 200, 200, 30)];
    label.tag = 9090;
    label.textColor = [UIColor blackColor];
    label.text = #------;
    label.textAlignment = NSTextAlignmentCenter;
    [self.view addSubview:label];

        

        SecondViewController中有一个Button(按钮触发通知的发送)

        

[Java] 查看源文件 复制代码
    UIButton *btn = [UIButton buttonWithType: (UIButtonTypeCustom)];
    [btn setTitle:#触发通知 forState: (UIControlStateNormal)];
    [btn setTitleColor:[UIColor blackColor] forState: (UIControlStateNormal)];
    btn.frame = CGRectMake(100, 100, 150, 30);
    [btn addTarget:self action:#selector(btnAction: ) forControlEvents: (UIControlEventTouchUpInside)];
    [self.view addSubview:btn];


[Java] 查看源文件 复制代码
// 用按钮事件模拟触发通知
- (void)btnAction: (UIButton *)btn {
    [[NSNotificationCenter defaultCenter] postNotificationName:#CHANGE_LABELTEXT object:#第二页的通知内容];
    
    [[NSNotificationCenter defaultCenter] postNotificationName:#APPDELEGATE_NOTIFICATION object:#通知Applegate执行事件];
}

        

        注册两个通知中心:

        

        AppDelegate.m

        

[Java] 查看源文件 复制代码
//     注册通知 self接受名为#APPDELEGATE_NOTIFICATION的通知后,执行notification:方法
//     nil表示不限制通知的发送者
    [[NSNotificationCenter defaultCenter] addObserver:self selector:#selector(notification: ) name:#APPDELEGATE_NOTIFICATION object:nil];


[Java] 查看源文件 复制代码
// 接受对应通知之后执行的方法
- (void)notification: (NSNotification *)notification {
//    notification.name 通知的name
//    notification.object 通知的内容, 可自定义
    NSLog(#%#, notification.object);
}

        

        

        

        ViewController.m

[Java] 查看源文件 复制代码
// 注册通知 self接受名为#CHANGE_LABELTEXT的通知后,执行notification:方法
    // nil表示不限制通知的发送者
    [[NSNotificationCenter defaultCenter] addObserver:self selector:#selector(notification: ) name:#CHANGE_LABELTEXT object:nil];



[Java] 查看源文件 复制代码
// 接受对应通知之后执行的方法
- (void)notification: (NSNotification *)notification {
//    notification.name 通知的name
//    notification.object 通知的内容, 可自定义
    NSString *str = (NSString *)notification.object;
    ((UILabel *)[self.view viewWithTag:9090]).text = str;
}



点击SecondViewController中的按钮时, 发送两个通知, 分别通知AppDelegate和ViewController进行打印和修改label的操作. 当然也可以一个通知多个地方监听, 执行不同操作.

        


                                               

23

主题

6660

帖子

1066

金钱

iOS大神

Rank: 6Rank: 6

分享大神

发表于 2018-1-11 14:48:18 | 显示全部楼层
相当不错,感谢无私分享精神!

3

主题

6647

帖子

444

金钱

攻城狮

Rank: 3Rank: 3

发表于 2018-1-11 14:51:35 | 显示全部楼层
内容很好,棒棒哒

0

主题

6628

帖子

-507

金钱

限制会员

发表于 2018-1-11 14:54:46 | 显示全部楼层
小弟学习了~支持,支持

14

主题

6638

帖子

1097

金钱

iOS大神

Rank: 6Rank: 6

发表于 2018-1-11 15:01:25 | 显示全部楼层
code4app好的内容真的很多~赞

18

主题

6639

帖子

1872

金钱

iOS大神

Rank: 6Rank: 6

发表于 2018-1-11 15:10:28 | 显示全部楼层
我是来学习的

18

主题

6657

帖子

1780

金钱

iOS大神

Rank: 6Rank: 6

发表于 2018-1-11 15:13:50 | 显示全部楼层
内容很好,棒棒哒
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

每日头条

通过邮件订阅最新 Code4App 信息
上一条 /4 下一条

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表