EventKit是在iOS和OS X下都可以使用的框架。今天主要展示的是如何给提醒事件添加重复提醒。

简单来说EKEvent 添加的事件在日历项中展示,EKReminder 添加的事件在提醒事项中展示。

#import

添加前都要获取“提醒事件”权限:

//生成事件数据库对象

EKEventStore *eventDB = [[EKEventStore alloc] init];

//申请事件类型权限

[eventDB requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError * _Nullable error) {

if (granted) { //授权是否成功

}

}];

值得注意的是,block内的方法是在子线程中的。

这里简单展示添加 日历项 和 提醒事项 的方法

1.添加日历项:

EKEvent *myEvent = [EKEvent eventWithEventStore:eventDB]; //创建一个日历事件

myEvent.title = title; //标题

myEvent.startDate = date; //开始date required

myEvent.endDate = date; //结束date required

[myEvent addAlarm:[EKAlarm alarmWithAbsoluteDate:date]]; //添加一个闹钟 optional

[myEvent setCalendar:[eventDB defaultCalendarForNewEvents]]; //添加calendar required

NSError *err;

[eventDB saveEvent:myEvent span:EKSpanThisEvent error:&err]; //保存

2.添加提醒事项:

//创建一个提醒功能

EKReminder *reminder = [EKReminder reminderWithEventStore:eventDB];

//标题

reminder.title = title;

//备注

reminder.notes = notes;

//添加日历

[reminder setCalendar:[eventDB defaultCalendarForNewReminders]];

NSCalendar *cal = [NSCalendar currentCalendar];

[cal setTimeZone:[NSTimeZone systemTimeZone]];

NSInteger flags = NSCalendarUnitYear | NSCalendarUnitMonth|

NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;

NSDateComponents *dateComp = [cal components:flags fromDate:date];

//判断 这个时间是周几 和 每周第一个提醒时间对比

dateComp.timeZone = [NSTimeZone systemTimeZone];

reminder.startDateComponents = dateComp; //开始时间

reminder.dueDateComponents = dateComp; //到期时间

reminder.priority = 1; //优先级

//添加一个闹钟

EKAlarm *alarm = [EKAlarm alarmWithAbsoluteDate:date];

[reminder addAlarm:alarm];

NSError *err;

[eventDB saveReminder:reminder commit:YES error:&err];

[[NSOperationQueue mainQueue] addOperationWithBlock:^{

if (err) {

TJMLog(@"设置提醒失败:%@",err.localizedDescription);

} else {

TJMLog(@"设置提醒成功");

}

}];

重复需要用到EKRecurrenceRule 这个类

初始化方法:

- (instancetype)initRecurrenceWithFrequency:(EKRecurrenceFrequency)type

interval:(NSInteger)interval

daysOfTheWeek:(nullable NSArray *)days

daysOfTheMonth:(nullable NSArray *)monthDays

monthsOfTheYear:(nullable NSArray *)months

weeksOfTheYear:(nullable NSArray *)weeksOfTheYear

daysOfTheYear:(nullable NSArray *)daysOfTheYear

setPositions:(nullable NSArray *)setPositions

end:(nullable EKRecurrenceEnd *)end;

参数说明:[1]

参数名

参考值

组合方式

举例

days

具体周几 EKRecurrenceDayOfWeek类型的数组

只要type!=EKRecurrenceFrequencyDaily时都可以使用

days包含EKTuesday和EKFriday两个元素表示每个周二和周四都执行事件

monthDays

月中的哪几天

一个NSNumber的数组,取值范围-31-31且不能为0,负数表示从月底往前算

只有当type==EKRecurrenceFrequencyDaily时

monthDays包含-1和1两个元素,那么将在每个月的第一天和最后一天执行事件

months

一年中的哪几个月

一个NSNumber的数组,取值范围1-12,即1月到12月 只有当type==EKRecurrenceFrequencyYearly时

months包含-1和1两个元素,那么将在每个月的第一天和最后一天执行事件

weeksOfTheYear

一个NSNumber的数组,取值范围-53到53,负数表示从年底往前算(每年有53个周)

只有当type==EKRecurrenceFrequencyYearly时

如果你设置的原始的事件触发时间是周三,然后设置weeksOfTheYear为1和-1两个元素,则表示每年第一周的周三和最后一周的周三触发事件。但如果你没设置周三,只设置第一周和最后一周的话,事件并不会被触发

daysOfTheYear一年中的哪几天

一个NSNumber的数组,取值范围-366到366,负数表示从年底往前算

只有当type==EKRecurrenceFrequencyYearly时

daysOfTheYear包含-1和1两个元素,那么将在每年的第一天和最后一天执行事件

setPositions

这里的position并不是地理位置。该参数取决于其他参数的设置,表示根据其他重复规则,第几次会执行

一个NSNumber的数组,取值范围-366到366,负数表示从会发生的情况中的最后一种往前数

只要type!=EKRecurrenceFrequencyDaily时都可以使用 假设当前有一个事件标识一年中每周的一到五执行,当setPositions中的值为1和-1时,表示只有这一年第一周的一到五和最后一周的一到五才会触发事件

你可以对上表中的参数赋予任何值,也可以忽略,如果你提供了多种参数组合,则只会执行days的方式。 设定完了重复规则之后,可以调用 addRecurrenceRule: 方法添加到事件中。

举例(每周日,周一,周二提醒):

//添加重复

NSArray *weekArr = @[@1,@2,@3];//1代表周日以此类推

// 也可以写成NSArray *weekArr = @[@(EKWeekdaySunday),@(EKWeekdayMonday),@(EKWeekdayTuesday)];

[weeks enumerateObjectsUsingBlock:^(NSNumber * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

EKRecurrenceDayOfWeek *daysOfWeek = [EKRecurrenceDayOfWeekdayOfWeek:obj.integerValue];

[weekArr addObject:daysOfWeek];

}];

EKRecurrenceRule *rule = [[EKRecurrenceRule alloc]initRecurrenceWithFrequency:EKRecurrenceFrequencyWeekly interval:1 daysOfTheWeek:weekArr daysOfTheMonth:nil monthsOfTheYear:nil weeksOfTheYear:nil daysOfTheYear:nil setPositions:nil end:nil];

[reminder addRecurrenceRule:rule];

android日历事件 简书,iOS EventKit 添加日历及提醒事项(重复提醒)相关推荐

  1. android 名片识别 简书,iOS 自己实现 名片识别 三 图片处理

    主题: 图片处理 声明:下面这些图片仅供学习使用 0.png 1.剪切图片 根据矩形特征剪切图片 // @property (nonatomic , strong) CIImage *img; //@ ...

  2. android 名片识别 简书,iOS 自己实现 名片识别 四 图片转文字以及归类

    本页主题: 图片转文字以及归类 先看效果展示 原图: 原图 处理后: result OCR识别效果: 量 U ::; 愧睡酣苒 `:| . - @ 唧涮区 总 代埋 í 倪礼波经理 展厅: 西部家具城 ...

  3. 给简书找BUG赢好礼17.04.11——简书iOS 3.5.0 公测【 App内支持提现/创作流程优化】...

    你给简书找bug,简书给你送好礼.即日起,参与简书公测就有机会获得简书提供的精美周边!点我快速获得公测资格>> 本期公测版本-简书iOS 3.5.0: 更新说明 1.1 App内支持直接提 ...

  4. 简书iOS APP内测邀请

    简书iOS APP正在进行全新改版,新版本的功能涉及阅读文章/发表评论/订阅管理专题/社交动态/个人主页展示等.我们欢迎对简书新版iOS APP感兴趣的你参与我们的内测申请. 新版iOS简书的界面,是 ...

  5. 简书iOS客户端更新日志170418-App内支持提现/创作流程优化

    简书iOS 3.5.0已正式上线,赶紧更新体验吧~下载链接>> 更新说明 1.1 App内支持直接提现啦 点击消息-赞赏,在赞赏页面,如果你余额大于等于100,你可以直接申请提现 提现需要 ...

  6. 给简书找BUG赢好礼17.11.27——简书iOS 4.2.0 公测(全新简友圈、发现页;连载内容横空出世)...

    这一次,我们很不一般!简书iOS最新版4.2.0公测!现在召集首批体验的用户,您的意见将会非常地宝贵和重要! 为表达谢意,凡参与简书公测,就有机会获得简书提供的精美周边! 点击下载4.2.0>& ...

  7. android 仿简书评论,Android 开发仿简书登录框可删除内容或显示密码框的内容

    简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedit ...

  8. Android点击按钮显示密码,Android 开发仿简书登录框可删除内容或显示密码框的内容...

    简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedit ...

  9. 简书iOS客户端更新日志150912-评论分享/手机号及微信登录/本地草稿保存等

    9月小假期后,在6天的疲惫工作后的第一个周末,简书君依然没有放下更新的脚步哦- 先上链接:[简书iOS 2.9.1更新/下载链接] 现在我们的活动 给简书app写评论,送明信片!送简书包!仍在进行中, ...

最新文章

  1. jQuery 中 is() 函数常见使用方法
  2. 父类指针访问子类成员变量
  3. 由浅到浅入门批量渲染(二)
  4. 用py2exe打包成一个exe文件
  5. 2020年度工作计划_2020最新年度个人工作计划(精选3篇)
  6. 【python教程入门学习】Python 正则表达式
  7. angular2.0中为什么初始化的时候就把全部路由下的模板文件加载出来的原因。
  8. 使用ImageMagick和Tesseract进行简单数字图像识别
  9. 程序员翻车时的 30 种常见反应!第21个深有感触...
  10. 活用锚点解决的问题(由一个简单应用想到的许多)
  11. html注册手机号验证,js正则表达式验证手机号码,用户名和邮箱
  12. erdas2015几何校正模块在哪_什么是几何校正和正射校正还有怎样用erdas做几何校正...
  13. 海思移植 APR(Apache Portable Runtime)
  14. linux 无法定位程序,三步搞定无法定位程序输入点 于动态链接库上
  15. Top 25款3DMAX建筑设计相关插件
  16. 如何解决Mac电脑浏览器网页自动放大的问题?
  17. 华为鸿蒙手机什么时候出售,南财快评:鸿蒙出世,现在明白任正非为什么会说“宁可卖5G,也不会卖终端”了...
  18. Google 桌面 Linux 版 入门指南 Ubuntu 特刊
  19. Unity创作赛车游戏的四款插件
  20. 设备加密狗、软加密狗

热门文章

  1. AJP:双相情感障碍高遗传风险年轻人结构连接的纵向变化
  2. Qt 5.12--Item详解
  3. 从 IT 时代到 DT 时代的转型
  4. 高并发下数据库插入常见的问题
  5. 前端之refs焦点管理
  6. 拉格朗日中值定理,柯西中值定理,积分中值定理,广义积分中值定理的证明.( 纯手写,细节)
  7. C++程序设计原理与实践(C++之父最作力作) 中文PDF高清版下载
  8. KVM之libvirt 介绍
  9. oracle的groupby聚合函数效率,Oracle内容概述
  10. 2019高速数据采集卡动态