iOS开发之EventKitUI框架的应用

简介: iOS开发之EventKitUI框架的应用

前面博客,有介绍EventKit这个框架的使用,使用EventKit可以与系统的日历和提醒应用进行交互,读写用户的日程事件。EventKitUI,顾名思义,其实基于EventKit框架,提供了一套系统的事件管理界面。EventKit的基础内容介绍如下:


https://my.oschina.net/u/2340880/blog/3066175


一、EKCalendarChooser日历选择页面


     EKCalendarChooser提供了选择日历,即选择EKCalendar对象的视图控制器,示例如下:


EKCalendarChooser *chooser = [[EKCalendarChooser alloc] initWithSelectionStyle:EKCalendarChooserSelectionStyleSingle displayStyle:EKCalendarChooserDisplayAllCalendars eventStore:self.eventStore];

chooser.showsDoneButton = YES;

chooser.showsCancelButton = YES;

chooser.delegate = self;

[self.navigationController pushViewController:chooser animated:YES];

需要注意,在实例化EKCalendarChooser的时候,需要关联一个EKEventStore对象,用来进行数据操作。


EKCalendarChooser中属性方法如下:


// 实例化方法

/*

typedef NS_ENUM(NSInteger, EKCalendarChooserSelectionStyle) {

   EKCalendarChooserSelectionStyleSingle,    // 单选模式

   EKCalendarChooserSelectionStyleMultiple   // 多选模式

};


typedef NS_ENUM(NSInteger, EKCalendarChooserDisplayStyle) {

   EKCalendarChooserDisplayAllCalendars,         // 展示全部日历

   EKCalendarChooserDisplayWritableCalendarsOnly // 只展示可写的日历

};

*/

- (id)initWithSelectionStyle:(EKCalendarChooserSelectionStyle)selectionStyle

               displayStyle:(EKCalendarChooserDisplayStyle)displayStyle

                 eventStore:(EKEventStore *)eventStore;

// 实例化方法 entityType参数决定是 系统的日历 还是 提醒 对应的 EKCalander

- (id)initWithSelectionStyle:(EKCalendarChooserSelectionStyle)style

               displayStyle:(EKCalendarChooserDisplayStyle)displayStyle

                 entityType:(EKEntityType)entityType

                 eventStore:(EKEventStore *)eventStore;

// 获取用户选中的日历 集合

@property(nonatomic, copy) NSSet<EKCalendar *> *selectedCalendars;

// 选择的风格

@property(nonatomic, readonly) EKCalendarChooserSelectionStyle    selectionStyle;

// 代理对象

@property(nonatomic, weak, nullable) id<EKCalendarChooserDelegate>        delegate;

// 是否展示完成按钮 在导航上

@property(nonatomic) BOOL showsDoneButton;

// 是否展示取消按钮在导航上

@property(nonatomic) BOOL showsCancelButton;

EKCalendarChooserDelegate代理中定义的方法如下:


@protocol EKCalendarChooserDelegate <NSObject>

@optional

// 用户选择改变后触发的回调

- (void)calendarChooserSelectionDidChange:(EKCalendarChooser *)calendarChooser;

// 用户选择完成后触发的回调

- (void)calendarChooserDidFinish:(EKCalendarChooser *)calendarChooser;

// 用户取消选择后触发的回调

- (void)calendarChooserDidCancel:(EKCalendarChooser *)calendarChooser;

@end

二、EKEventViewController事件详情页面


     EKEventViewController提供了展示某个事件详情的试图控制器,示例如下:


- (void)queryEvent {

   for (EKCalendar *cal in [self.eventStore calendarsForEntityType:EKEntityTypeEvent]) {

       if ([cal.title isEqualToString:@"珲少的事项日历"]) {

           NSCalendar *calendar = [NSCalendar currentCalendar];

     

           NSDateComponents *oneMonthFromNowComponents = [[NSDateComponents alloc] init];

           oneMonthFromNowComponents.month = 1;

           NSDate *oneMonthFromNow = [calendar dateByAddingComponents:oneMonthFromNowComponents

                                                               toDate:[NSDate date]

                                                              options:0];


           NSPredicate*predicate = [self.eventStore predicateForEventsWithStartDate:[NSDate date] endDate:oneMonthFromNow calendars:@[cal]];

         

           NSArray *eventArray = [self.eventStore eventsMatchingPredicate:predicate];

           // 打开控制器

           EKEventViewController *controller = [[EKEventViewController alloc] init];

           controller.event = eventArray.firstObject;

           [self presentViewController:controller animated:YES completion:nil];

       }

   }

}

EKEventViewController也支持进行事件的编辑,其中属性方法如下:


@interface EKEventViewController : UIViewController

// 代理对象

@property(nonatomic, weak, nullable) id<EKEventViewDelegate>  delegate;

// 对应的事件对象,在使用控制器时,必须设置这个属性

@property(nonatomic, retain, null_unspecified) EKEvent *event;

// 设置是否允许编辑

@property(nonatomic) BOOL      allowsEditing;

// 设置是否允许日历预览

@property(nonatomic) BOOL      allowsCalendarPreview;

@end

EKEventViewDelegate中只定义了一个方法,如下:


@protocol EKEventViewDelegate <NSObject>

@required

// 完成某个行为后会调用的代理回调

/*

typedef NS_ENUM(NSInteger, EKEventViewAction) {

   EKEventViewActionDone,                  // 完成了事件

   EKEventViewActionResponded,             // 回复了事件

   EKEventViewActionDeleted,               // 删除了事件

};

*/

- (void)eventViewController:(EKEventViewController *)controller didCompleteWithAction:(EKEventViewAction)action __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_2);

@end

三、EKEventEditViewController事件编辑控制器


     EKEventEditViewController提供了事件编辑的视图控制器,对于可编辑的EKEventViewController视图控制器,当用户点击的编辑按钮后,也会调用EKEventEditViewController视图控制器进行编辑,示例如下:


EKEventEditViewController *controller = [[EKEventEditViewController alloc] init];

controller.event = eventArray.firstObject;

[self presentViewController:controller animated:YES completion:nil];

其中属性方法如下:


@interface EKEventEditViewController : UINavigationController

// 代理对象

@property(nonatomic, weak, nullable) id<EKEventEditViewDelegate>  editViewDelegate;

// 编辑行为完成后,进行数据操作的EKEventStore对象

@property(nonatomic, retain, null_unspecified) EKEventStore   *eventStore;

// 要进行编辑的事件对象

@property(nonatomic, retain, nullable) EKEvent *event;

// 取消编辑

- (void)cancelEditing;

@end

EKEventEditViewDelegate解析如下:


@protocol EKEventEditViewDelegate <NSObject>

@required

// 完成某个编辑动作后调用

- (void)eventEditViewController:(EKEventEditViewController *)controller didCompleteWithAction:(EKEventEditViewAction)action;

@optional

// 设置新建事件默认对象的日历

- (EKCalendar *)eventEditViewControllerDefaultCalendarForNewEvents:(EKEventEditViewController *)controller;

@end

 

目录
相关文章
|
13天前
|
搜索推荐 数据管理 定位技术
iOS应用开发中有多种主流框架
iOS应用开发中有多种主流框架
136 60
|
8天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
1天前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。
|
16天前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
36 9
|
12天前
|
设计模式 Swift iOS开发
探索iOS开发:从基础到高级,打造你的第一款App
【10月更文挑战第40天】在这个数字时代,掌握移动应用开发已成为许多技术爱好者的梦想。本文将带你走进iOS开发的世界,从最基础的概念出发,逐步深入到高级功能实现,最终指导你完成自己的第一款App。无论你是编程新手还是有志于扩展技能的开发者,这篇文章都将为你提供一条清晰的学习路径。让我们一起开始这段旅程吧!
|
15天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
13天前
|
iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第39天】在苹果的生态系统中,SwiftUI框架以其声明式语法和易用性成为开发者的新宠。本文将深入SwiftUI的核心概念,通过实际案例展示如何利用这一框架快速构建用户界面,并探讨其对iOS应用开发流程的影响。
|
16天前
|
JSON 前端开发 API
探索iOS开发之旅:打造你的第一个天气应用
【10月更文挑战第36天】在这篇文章中,我们将踏上一段激动人心的旅程,一起构建属于我们自己的iOS天气应用。通过这个实战项目,你将学习到如何从零开始搭建一个iOS应用,掌握基本的用户界面设计、网络请求处理以及数据解析等核心技能。无论你是编程新手还是希望扩展你的iOS开发技能,这个项目都将为你提供宝贵的实践经验。准备好了吗?让我们开始吧!
|
21天前
|
设计模式 前端开发 Swift
探索iOS开发:从初级到高级的旅程
【10月更文挑战第31天】在这篇文章中,我们将一起踏上iOS开发的旅程。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。我们将从基础开始,逐步深入到更高级的技术和概念。让我们一起探索iOS开发的世界吧!
|
24天前
|
设计模式 前端开发 Swift
探索iOS开发:从初级到高级的旅程
【10月更文挑战第28天】在这篇技术性文章中,我们将一起踏上一段探索iOS开发的旅程。无论你是刚入门的新手,还是希望提升技能的开发者,这篇文章都将为你提供宝贵的指导和灵感。我们将从基础概念开始,逐步深入到高级主题,如设计模式、性能优化等。通过阅读这篇文章,你将获得一个清晰的学习路径,帮助你在iOS开发领域不断成长。
62 2

相关实验场景

更多
下一篇
无影云桌面