iOS EventKit 添加日歷及提醒事項(重復提醒)

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


簡單來說EKEvent 添加的事件在日歷項中展示璧眠,EKReminder 添加的事件在提醒事項中展示琴锭。

#import <EventKit/EventKit.h>

添加前都要獲取“提醒事件”權(quán)限:

    //生成事件數(shù)據(jù)庫對象
    EKEventStore *eventDB = [[EKEventStore alloc] init];
    //申請事件類型權(quán)限
    [eventDB requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError * _Nullable error) {
        if (granted) { //授權(quán)是否成功
           
        }
    }];

值得注意的是欲芹,block內(nèi)的方法是在子線程中的蝌借。
這里簡單展示添加 日歷項 和 提醒事項 的方法
1.添加日歷項:

    EKEvent *myEvent  = [EKEvent eventWithEventStore:eventDB]; //創(chuàng)建一個日歷事件
    myEvent.title     = title;  //標題
    myEvent.startDate = date; //開始date   required
    myEvent.endDate   = date;  //結(jié)束date    required
    [myEvent addAlarm:[EKAlarm alarmWithAbsoluteDate:date]]; //添加一個鬧鐘  optional
    [myEvent setCalendar:[eventDB defaultCalendarForNewEvents]]; //添加calendar  required
    NSError *err;
    [eventDB saveEvent:myEvent span:EKSpanThisEvent error:&err]; //保存

2.添加提醒事項:

    //創(chuàng)建一個提醒功能
    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; //優(yōu)先級
    //添加一個鬧鐘
    EKAlarm *alarm = [EKAlarm alarmWithAbsoluteDate:date]; 
    [reminder addAlarm:alarm];
    NSError *err;
    [eventDB saveReminder:reminder commit:YES error:&err];
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        if (err) {
            TJMLog(@"設(shè)置提醒失斘羟啤:%@",err.localizedDescription);
        } else {
            TJMLog(@"設(shè)置提醒成功");
        }
    }];

重復需要用到EKRecurrenceRule 這個類
初始化方法:

- (instancetype)initRecurrenceWithFrequency:(EKRecurrenceFrequency)type
                         interval:(NSInteger)interval 
                    daysOfTheWeek:(nullable NSArray<EKRecurrenceDayOfWeek *> *)days
                   daysOfTheMonth:(nullable NSArray<NSNumber *> *)monthDays
                  monthsOfTheYear:(nullable NSArray<NSNumber *> *)months
                   weeksOfTheYear:(nullable NSArray<NSNumber *> *)weeksOfTheYear
                    daysOfTheYear:(nullable NSArray<NSNumber *> *)daysOfTheYear
                     setPositions:(nullable NSArray<NSNumber *> *)setPositions
                              end:(nullable EKRecurrenceEnd *)end;

參數(shù)說明:[1]

參數(shù)名 參考值 組合方式 舉例
days 具體周幾 EKRecurrenceDayOfWeek類型的數(shù)組 只要type!=EKRecurrenceFrequencyDaily時都可以使用 days包含EKTuesday和EKFriday兩個元素表示每個周二和周四都執(zhí)行事件
monthDays
月中的哪幾天
一個NSNumber的數(shù)組,取值范圍-31-31且不能為0菩佑,負數(shù)表示從月底往前算 只有當type==EKRecurrenceFrequencyDaily時 monthDays包含-1和1兩個元素自晰,那么將在每個月的第一天和最后一天執(zhí)行事件
months
一年中的哪幾個月
一個NSNumber的數(shù)組,取值范圍1-12稍坯,即1月到12月 只有當type==EKRecurrenceFrequencyYearly時 months包含-1和1兩個元素酬荞,那么將在每個月的第一天和最后一天執(zhí)行事件
weeksOfTheYear 一個NSNumber的數(shù)組,取值范圍-53到53瞧哟,負數(shù)表示從年底往前算(每年有53個周) 只有當type==EKRecurrenceFrequencyYearly時 如果你設(shè)置的原始的事件觸發(fā)時間是周三混巧,然后設(shè)置weeksOfTheYear為1和-1兩個元素,則表示每年第一周的周三和最后一周的周三觸發(fā)事件勤揩。但如果你沒設(shè)置周三咧党,只設(shè)置第一周和最后一周的話,事件并不會被觸發(fā)
daysOfTheYear一年中的哪幾天 一個NSNumber的數(shù)組雄可,取值范圍-366到366凿傅,負數(shù)表示從年底往前算 只有當type==EKRecurrenceFrequencyYearly時 daysOfTheYear包含-1和1兩個元素缠犀,那么將在每年的第一天和最后一天執(zhí)行事件
setPositions 這里的position并不是地理位置。該參數(shù)取決于其他參數(shù)的設(shè)置聪舒,表示根據(jù)其他重復規(guī)則辨液,第幾次會執(zhí)行 一個NSNumber的數(shù)組,取值范圍-366到366箱残,負數(shù)表示從會發(fā)生的情況中的最后一種往前數(shù) 只要type!=EKRecurrenceFrequencyDaily時都可以使用 假設(shè)當前有一個事件標識一年中每周的一到五執(zhí)行滔迈,當setPositions中的值為1和-1時,表示只有這一年第一周的一到五和最后一周的一到五才會觸發(fā)事件

你可以對上表中的參數(shù)賦予任何值被辑,也可以忽略燎悍,如果你提供了多種參數(shù)組合,則只會執(zhí)行days的方式盼理。 設(shè)定完了重復規(guī)則之后谈山,可以調(diào)用 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];
   

參考:
【1】http://blog.csdn.net/wangbingwf0536/article/details/45579919

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市臊诊,隨后出現(xiàn)的幾起案子鸽粉,更是在濱河造成了極大的恐慌,老刑警劉巖抓艳,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件触机,死亡現(xiàn)場離奇詭異,居然都是意外死亡玷或,警方通過查閱死者的電腦和手機儡首,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來偏友,“玉大人椒舵,你說我怎么就攤上這事≡继福” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵犁钟,是天一觀的道長棱诱。 經(jīng)常有香客問我,道長涝动,這世上最難降的妖魔是什么迈勋? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮醋粟,結(jié)果婚禮上靡菇,老公的妹妹穿的比我還像新娘重归。我一直安慰自己,他們只是感情好厦凤,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布鼻吮。 她就那樣靜靜地躺著,像睡著了一般较鼓。 火紅的嫁衣襯著肌膚如雪椎木。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天博烂,我揣著相機與錄音香椎,去河邊找鬼。 笑死禽篱,一個胖子當著我的面吹牛畜伐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躺率,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼玛界,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肥照?” 一聲冷哼從身側(cè)響起脚仔,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舆绎,沒想到半個月后鲤脏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡吕朵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年猎醇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片努溃。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡硫嘶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出梧税,到底是詐尸還是另有隱情沦疾,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布第队,位于F島的核電站哮塞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏凳谦。R本人自食惡果不足惜忆畅,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尸执。 院中可真熱鬧家凯,春花似錦缓醋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驯镊,卻和暖如春葫督,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背板惑。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工橄镜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人冯乘。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓洽胶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親裆馒。 傳聞我的和親對象是個殘疾皇子姊氓,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354