leader太忙了,需求的效果图来不急出。于是我们开发上。leader给出功能。开发们各自承包不同功能的效果图。先手绘,在借助软件让效果图动起来。开会讨论,可圈可点,忙的不亦乐乎。
我承包的效果图,有提醒功能,于是乎借鉴了苏宁上的写入日历,提醒用户。好处是,不局限于网络,借助系统实现提醒功能,稳定可靠。通过大会后,并认可,并新增了对已写入日历的信息追加功能等细节。
需求定后,开始开发,现已提测。系统的日历功能,实现如下:
//事件源self.eventStore,全局的
//请求权限
[self.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
CRMLog(@"error = %@",error.description);
} else {
//查找已存在的日历事件
EKEvent * event = [self productEventInSystemCalendarBasedDictionary:dictionary];
if (event) {
//向已存在的日历事件中追加notes
event.notes = [NSString stringWithFormat:@"%@\n%@",event.notes,@“xxx”];
} else {
//创建新的日历事件
event = [self newEventsWithDictionary:dictionary];
}
//只有日历事件编辑的界面,当有权限时,展示的是编辑界面,当无权限时,展示的是无权限页。系统EKEventEditViewController实现的,很方便。
self.editVC = [[EKEventEditViewController alloc] init];
self.editVC.editViewDelegate = self;
self.editVC.eventStore = self.eventStore;
self.editVC.event = event;
//用present 的方法展示出
[self presentViewController:self.editVC animated:NO completion:nil];
//有预览+编辑两个界面
/*
EKEventViewController * eventController = [[EKEventViewController alloc] init];
eventController.title = @"写日历";
eventController.event = event;
eventController.allowsEditing = YES;
eventController.allowsCalendarPreview = YES;
eventController.delegate = self;
navigationController = [[UINavigationController alloc] initWithRootViewController:eventController];
[self presentViewController:navigationController animated:YES completion:nil];
*/
}
});
}];
//已存在的日历事件
- (EKEvent *)productEventInSystemCalendarBasedDictionary:(NSDictionary *)dictionary {
NSArray * tempA = [self.eventStore calendarsForEntityType:EKEntityTypeEvent];
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate * startDate = [dateFormatter dateFromString:[dictionary objectForKey:@"time"]];
NSDate * endDate = [startDate dateByAddingTimeInterval:60 * 60 * 24 * 3];
NSPredicate * predicate = [self.eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:tempA];
NSArray * eventArray = [self.eventStore eventsMatchingPredicate:predicate];
NSString * eventTitle = [NSString stringWithFormat:@"%@",[dictionary objectForKey:@"name"]];
for (EKEvent * eventObject in eventArray) {
if ([eventObject.title isEqualToString:eventTitle]) {
return eventObject;
}
}
return nil;
}
//新的日历事件
- (EKEvent *)newEventsWithDictionary:(NSDictionary *)dictionary {
EKEvent * event = [EKEvent eventWithEventStore:self.eventStore];
event.title = [NSString stringWithFormat:@"%@",[dictionary objectForKey:@"name"]];
//开始时间(必须传)
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
event.startDate = [dateFormatter dateFromString:[dictionary objectForKey:@"time"]];
//结束时间(必须传)
event.endDate = event.startDate;
event.allDay = YES;
//添加提醒
//相对于当天12am。此处设置的是1天前上午9点提醒
[event addAlarm:[EKAlarm alarmWithRelativeOffset:(-60*60*15)]];
event.notes = @“xxxxx”;
[event setCalendar:[self.eventStore defaultCalendarForNewEvents]];
return event;
}
#pragma mark -EKEventEditViewDelegate
- (void)eventEditViewController:(EKEventEditViewController *)controller didCompleteWithAction:(EKEventEditViewAction)action {
[viewC dismissViewControllerAnimated:YES completion:nil];
}