iOS小笔记 | 通知关闭开启状态的监控

  • 时间:2019-01-19 18:44 作者:无夜之星辰 来源:无夜之星辰 阅读:92
  • 扫一扫,手机访问
摘要:相似于 的通知管理页:不同的是我这里是用的一个UISwitch来表示通知的关闭开启状态:监听通知状态.gif整个流程就是:点击switch,跳转到设置页;开启or关闭通知;回到app,刷新switch状态。1.关于switch假如单纯的放一个UISwitch上去,客户点击,switch的状态切换动画

相似于简书的通知管理页:

不同的是我这里是用的一个UISwitch来表示通知的关闭开启状态:

监听通知状态.gif

整个流程就是:

  1. 点击switch,跳转到设置页;
  2. 开启or关闭通知;
  3. 回到app,刷新switch状态。

1.关于switch

假如单纯的放一个UISwitch上去,客户点击,switch的状态切换动画会与跳转到系统设置页的转场动画同时执行,尽管很快,但还是可以看到switch的状态切换,我不想让switch的状态在这个时候改变。一个处理方案是在switch上放一个透明button,由button来解决客户事件,而switch只用于表示通知开闭状态:

- (UISwitch *)notifSwitch {    if (!_notifSwitch) {        _notifSwitch = [[UISwitch alloc] init];        // 在switch上add一个透明button        UIButton *button = [[UIButton alloc] initWithFrame:_notifSwitch.bounds];        [_notifSwitch addSubview:button];        [button addTarget:self action:@selector(switchButtonClicked) forControlEvents:UIControlEventTouchUpInside];    }    return _notifSwitch;}

注:UISwitch的size是固定的:

// This class enforces a size appropriate for the control, and so the frame size is ignored.

2.跳转到设置页

- (void)switchButtonClicked {    // 跳转到系统设置    NSURL *settingURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];    if (@available(iOS 10.0, *)) {        [[UIApplication sharedApplication] openURL:settingURL options:[NSDictionary dictionary] completionHandler:nil];    } else {        [[UIApplication sharedApplication] openURL:settingURL];    }}

两个跳转方法,一个是iOS10之前的,一个是iOS10之后的。

3.刷新switch

UIUserNotificationSettings *setting = [[UIApplication sharedApplication] currentUserNotificationSettings];self.notifSwitch.on = (setting.types != UIUserNotificationTypeNone);

4.刷新时机

系统设置其实也是一个app,从你的app跳转到系统设置,app此时由前端进入后端;从系统设置回到你的app,app由后端进入前端。此时AppDelegate的applicationWillEnterForeground:会被调用。

系统提供了一个通知,标识APP将要进入前端:

UIKIT_EXTERN NSNotificationName const UIApplicationWillEnterForegroundNotification      NS_AVAILABLE_IOS(4_0);

所以可以通过监听这个通知来执行刷新:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshSwitch) name:UIApplicationWillEnterForegroundNotification object:nil];

整个过程就是这样的,假如你有更好的思路,欢迎分享。

上一篇 目录 下一篇
  • 全部评论(0)
最新发布的资讯信息
【系统环境|windows】Axios 取消重复请求(2020-11-08 07:00)
【系统环境|windows】熬了一晚上,小白用Python写了一个股票提示系统(2020-11-08 07:00)
【系统环境|windows】2020要想成为一名专业的web前台开发程序员,需要学习什么?(2020-11-08 06:35)
【系统环境|windows】前台面试每日 3+1 —— 第546天(2020-11-08 06:34)
【系统环境|windows】聊聊前台工程师的职业发展 (纯干货)(2020-11-08 06:34)
【系统环境|windows】浅谈OAuth 2.0基本原理(2020-11-08 06:34)
【系统环境|windows】程序员初入职场避坑指南(2020-11-08 06:34)
【系统环境|windows】python的绘图利器--海龟绘图turtle(2020-11-08 06:33)
【系统环境|windows】pyinstaller打包结果瘦身(2020-11-08 06:33)
【系统环境|windows】前台面试每日 3+1 —— 第518天(2020-11-08 06:33)
血鸟云
手机二维码手机访问领取大礼包
返回顶部