iOS開(kāi)發(fā)將App發(fā)布的事件直接添加到系統(tǒng)日歷提醒事項(xiàng)的封裝

隨著App的開(kāi)發(fā)需求泰佳,很多軟件有用戶(hù)發(fā)布信息的需求,該功能也許是針對(duì)用戶(hù)自己的需求而發(fā)布的尘吗、也許是他人逝她。反正就是針對(duì)事件將在未來(lái)的某個(gè)時(shí)間發(fā)生而做的預(yù)先處理。比如:參加組織某個(gè)活動(dòng)睬捶,舉辦某個(gè)活動(dòng)的等等黔宛。那么本文章就是針對(duì)作者所預(yù)先設(shè)定即將發(fā)生的事情添加到手機(jī)系統(tǒng)日歷提醒事項(xiàng),并設(shè)定需要提示的時(shí)間侧戴。
其實(shí)與大家共勉這個(gè)也是自己的項(xiàng)目需求宁昭,然后就...與大家共勉跌宛,不喜勿噴酗宋,多多指教。

系統(tǒng)日歷提醒事項(xiàng)的幾個(gè)屬性:
1疆拘、事件標(biāo)題
2蜕猫、事件發(fā)生的位置位置
3、開(kāi)始時(shí)間
4哎迄、結(jié)束時(shí)間
5回右、是否全天
6、事件發(fā)生前提醒的鬧鐘設(shè)定

項(xiàng)目需求:用戶(hù)發(fā)布未來(lái)的時(shí)間將會(huì)發(fā)生的活動(dòng)漱挚、事情翔烁。發(fā)布成功直接將此事件添加到手機(jī)系統(tǒng)日歷提醒事項(xiàng),添加成功繼續(xù)后面的一系列邏輯處理...

下面直接上代碼...封裝的...

下面是項(xiàng)目抽出來(lái)的類(lèi)旨涝,當(dāng)然做了一些修改蹬屹,保證You可以直接使用:

#import <Foundation/Foundation.h>

@interface EventCalendar : NSObject

+ (instancetype)sharedEventCalendar;

/**
 *  將App事件添加到系統(tǒng)日歷提醒事項(xiàng),實(shí)現(xiàn)鬧鈴提醒的功能
 *
 *  @param title      事件標(biāo)題
 *  @param location   事件位置
 *  @param startDate  開(kāi)始時(shí)間
 *  @param endDate    結(jié)束時(shí)間
 *  @param allDay     是否全天
 *  @param alarmArray 鬧鐘集合
 *  @param block      回調(diào)方法
 */
- (void)createEventCalendarTitle:(NSString *)title location:(NSString *)location startDate:(NSDate *)startDate endDate:(NSDate *)endDate allDay:(BOOL)allDay alarmArray:(NSArray *)alarmArray;

@end
#import "EventCalendar.h"
#import <EventKit/EventKit.h>
#import <UIKit/UIKit.h>

@implementation EventCalendar

static EventCalendar *calendar;

+ (instancetype)sharedEventCalendar{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        calendar = [[EventCalendar alloc] init];
    });
    
    return calendar;
}

+(instancetype)allocWithZone:(struct _NSZone *)zone{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        calendar = [super allocWithZone:zone];
    });
    return calendar;
}

- (void)createEventCalendarTitle:(NSString *)title location:(NSString *)location startDate:(NSDate *)startDate endDate:(NSDate *)endDate allDay:(BOOL)allDay alarmArray:(NSArray *)alarmArray{
    __weak typeof(self) weakSelf = self;
    
    EKEventStore *eventStore = [[EKEventStore alloc] init];
    
    if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)])
    {
        [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error){
            
            dispatch_async(dispatch_get_main_queue(), ^{
                __strong typeof(weakSelf) strongSelf = weakSelf;
                if (error)
                {
                    [strongSelf showAlert:@"添加失敗白华,請(qǐng)稍后重試"];
    
                }else if (!granted){
                    [strongSelf showAlert:@"不允許使用日歷,請(qǐng)?jiān)谠O(shè)置中允許此App使用日歷"];
                    
                }else{
                    EKEvent *event  = [EKEvent eventWithEventStore:eventStore];
                    event.title     = title;
                    event.location = location;
                    
                    NSDateFormatter *tempFormatter = [[NSDateFormatter alloc]init];
                    [tempFormatter setDateFormat:@"dd.MM.yyyy HH:mm"];
                    
                    event.startDate = startDate;
                    event.endDate   = endDate;
                    event.allDay = allDay;
                    
                    //添加提醒
                    if (alarmArray && alarmArray.count > 0) {
                        
                        for (NSString *timeString in alarmArray) {
                            [event addAlarm:[EKAlarm alarmWithRelativeOffset:[timeString integerValue]]];
                        }
                    }
                    
                    [event setCalendar:[eventStore defaultCalendarForNewEvents]];
                    NSError *err;
                    [eventStore saveEvent:event span:EKSpanThisEvent error:&err];
                    [strongSelf showAlert:@"已添加到系統(tǒng)日歷中"];
           
                }
            });
        }];
    }
}

- (void)showAlert:(NSString *)message
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:message delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];
    [alert show];
}

@end

等等再調(diào)用的時(shí)候慨默,如果需要在時(shí)間發(fā)生前提醒用戶(hù),需要傳入提醒時(shí)間數(shù)組弧腥,這個(gè)數(shù)組是按照秒計(jì)算的厦取。比如時(shí)間發(fā)生前一天提醒,時(shí)間數(shù)組的元素就是:-86400

希望本文章對(duì)需要此功能的朋友有幫助管搪,歡迎多多指教虾攻,本菜鳥(niǎo)將陸續(xù)分享自己遇到常用知識(shí)點(diǎn)的封裝與大家共勉铡买,歡迎多多指教,不喜勿噴霎箍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寻狂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子朋沮,更是在濱河造成了極大的恐慌蛇券,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件樊拓,死亡現(xiàn)場(chǎng)離奇詭異纠亚,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)筋夏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)蒂胞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人条篷,你說(shuō)我怎么就攤上這事骗随。” “怎么了赴叹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵鸿染,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我乞巧,道長(zhǎng)涨椒,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任绽媒,我火速辦了婚禮蚕冬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘是辕。我一直安慰自己囤热,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布获三。 她就那樣靜靜地躺著旁蔼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪石窑。 梳的紋絲不亂的頭發(fā)上牌芋,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音松逊,去河邊找鬼躺屁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛经宏,可吹牛的內(nèi)容都是我干的犀暑。 我是一名探鬼主播驯击,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼耐亏!你這毒婦竟也來(lái)了徊都?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤广辰,失蹤者是張志新(化名)和其女友劉穎暇矫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體择吊,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡李根,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了几睛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片房轿。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖所森,靈堂內(nèi)的尸體忽然破棺而出囱持,到底是詐尸還是另有隱情,我是刑警寧澤焕济,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布纷妆,位于F島的核電站,受9級(jí)特大地震影響吼蚁,放射性物質(zhì)發(fā)生泄漏凭需。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一肝匆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧顺献,春花似錦旗国、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至肿轨,卻和暖如春寿冕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背椒袍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工驼唱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人驹暑。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓玫恳,卻偏偏與公主長(zhǎng)得像辨赐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子京办,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容