Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >iOS开发之EventKitUI框架的应用

iOS开发之EventKitUI框架的应用

作者头像
珲少
发布于 2019-07-01 10:09:39
发布于 2019-07-01 10:09:39
1.1K00
代码可运行
举报
文章被收录于专栏:一“技”之长一“技”之长
运行总次数:0
代码可运行

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

https://cloud.tencent.com/developer/article/1453848

一、EKCalendarChooser日历选择页面

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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中属性方法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 实例化方法
/*
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代理中定义的方法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@protocol EKCalendarChooserDelegate <NSObject>
@optional
// 用户选择改变后触发的回调
- (void)calendarChooserSelectionDidChange:(EKCalendarChooser *)calendarChooser;
// 用户选择完成后触发的回调
- (void)calendarChooserDidFinish:(EKCalendarChooser *)calendarChooser;
// 用户取消选择后触发的回调
- (void)calendarChooserDidCancel:(EKCalendarChooser *)calendarChooser;
@end

二、EKEventViewController事件详情页面

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (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也支持进行事件的编辑,其中属性方法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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中只定义了一个方法,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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视图控制器进行编辑,示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
EKEventEditViewController *controller = [[EKEventEditViewController alloc] init];
controller.event = eventArray.firstObject;
[self presentViewController:controller animated:YES completion:nil];

其中属性方法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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解析如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@protocol EKEventEditViewDelegate <NSObject>
@required
// 完成某个编辑动作后调用
- (void)eventEditViewController:(EKEventEditViewController *)controller didCompleteWithAction:(EKEventEditViewAction)action;
@optional
// 设置新建事件默认对象的日历
- (EKCalendar *)eventEditViewControllerDefaultCalendarForNewEvents:(EKEventEditViewController *)controller;
@end
代码语言:txt
AI代码解释
复制
 (adsbygoogle = window.adsbygoogle || []).push({});
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS开发之EventKit框架的应用
      iOS系统自带的Calendar应用非常强大,用户可以在其中添加日程事件,并且其提供了接口供其他应用进行调用,可以向日历中进行事件的读取和写入。
珲少
2019/07/01
4.1K0
iOS开发之EventKit框架的应用
iOS开发之ExternalAccessory框架的应用
ExternalAccessory框架用来对外设进行管理,iOS外设通常是通过MFI认证的外部设备,可以通过蓝牙进行连接,也可以使用lighting端口进行连接。
珲少
2019/06/27
1.9K0
ios oc 本地添加日程
EKEventStore *eventStore = [[EKEventStore alloc] init];
conanma
2021/05/12
1.2K0
iOS开发之AddressBookUI框架详解
    AddressbookUI是iOS开发框架中提供的一套通讯录界面组件。其中封装好了一套选择联系人,查看联系人的界面,在需要时开发者可以直接调用。当然对于联系人界面,开发者也可以进行完全的自定义,下面链接博客中介绍了如何使用AddressBook框架操作通讯录与联系人。
珲少
2018/09/19
7410
iOS开发之AddressBookUI框架详解
iOS开发UINavigation系列二——UINavigationItem
        UINavigationItem是导航栏上用于管理导航项的类,在上一篇博客中,我们知道导航栏是通过push与pop的堆栈操作来对item进行管理的,同样,每一个Item自身也有许多属性可供我们进行自定制。这篇博客,主要讨论UINavigationItem的使用方法。
珲少
2018/08/15
7370
iOS开发UINavigation系列二——UINavigationItem
iOS好用的第三方侧边栏控件——MMDrawerController
        很多应用程序都采用了侧边栏这样的界面结构,MMDrawerController是一个轻量级的侧边栏抽屉控件,其支持左侧抽屉和右侧抽屉,可以很好的支持导航控制器,并且支持开发者对手势和动画进行自定义。MMDrawerController的git地址如下:
珲少
2018/08/15
2.9K0
iOS好用的第三方侧边栏控件——MMDrawerController
iOS视频功能模块的开发 原
        MPMoviePlayerController是iOS中进行视频播放开发的一个控制类,里面涵盖了视频播放中大部分的需求功能,在使用这个框架时,需要导入头文件<MediaPlayer/MediaPlayer.h>。
珲少
2018/08/16
1.1K0
iOS学习——UIPickerView的实现年月选择器
  最近项目上需要用到一个选择器,选择器中的内容只有年和月,而在iOS系统自带的日期选择器UIDatePicker中却只有四个选项如下,分别是时间(时分秒)、日期(年月日)、日期+时间(年月日时分)以及倒计时。其中并没有我们所需要的只显示年月的选择器,在网上找了很多相关的资料,但是觉得都写得过于麻烦。因此,为了满足项目需求,自己用UIPickerView写了一个只显示年月的选择器界面,同时还可以控制我们的显示的最小时间。当然,如果要控制其他内容也都是可以的,无非就是在数据处理上多一些处理和控制。 typed
mukekeheart
2018/03/26
4.7K0
iOS学习——UIPickerView的实现年月选择器
iOS学习——UIAlertController详解
  在开发中,弹出提示框是必不可少的。这两天项目中统一对已经被iOS API废弃的UIAlertView和UIActionSheet进行替换,我们知道,UIAlertView和UIActionSheet都已经被iOS的API所废弃了。在两者的API中都建议用UIAlertController替代,并通过设置不同的类型风格来选择是原先的UIAlertView或UIActionSheet的形式。   之前项目中一直用的都是原先的UIAlertView和UIActionSheet风格,所以对UIAlertCont
mukekeheart
2018/03/01
3.5K0
iOS学习——UIAlertController详解
iOS 面试策略之语言工具-Objective-C
Objective-C 是苹果为 iOS 和 Mac 开发量身定制的语言。它随着 iPhone 的出现而大火,直到今天国内外大多数的 App 依然是用 Objective-C 在写。
会写bug的程序员
2021/05/07
6990
iOS 面试策略之语言工具-Objective-C
iOS开发UINavigation系列一——导航栏UINavigtionBar
        在iOS开发中,我们通常会使用导航控制器,导航控制器中封装了一个UINavigationBar,实际上,我们也可以在不使用导航控制器的前提下,单独使用导航栏,在UINavigationBar中,也有许多我们可以定制的属性,用起来十分方便。
珲少
2018/08/15
1.2K0
iOS开发UINavigation系列一——导航栏UINavigtionBar
iOS开发之AssetsLibrary框架使用
    AssetsLibrary框架是专门用来操作相册相关资源的一个框架,其是iOS4到iOS9之间常使用的一个框架,在iOS9之后,系统系统了Photos框架代替了AssetsLibrary框架,但是AssetsLibrary框架依然可以使用,并且其结构和设计思路依然值得我们进行分析学习。
珲少
2018/09/20
1.1K0
iOS开发之AssetsLibrary框架使用
iOS10中Messages独立应用与扩展插件详析
        Messages是iOS系统中原生的信息应用,其既可以通过运营商网络发送短信息,也可以通过互联网进行类似微信类社交软件的即时聊天。但是由于其封闭性与功能的单一,使用其进行即时聊天的用户并不多。随着iOS10系统的推出,或许可以改变这一现状。在iOS10中,Messages的功能被扩展的十分强大,通过Messages,用户可以分享图片,音乐,视频,可以随手涂鸦,使用自定义的表情包,可以进行Apple Pay支付,购物,甚至可以在Messages中玩游戏。并且,上面所提到的这些功能都全面开发出了接口供开发者进行开发与扩展。
珲少
2018/08/15
1.1K0
iOS10中Messages独立应用与扩展插件详析
iOS翻页视图控制器UIPageViewController的应用
    UIPageViewController是iOS中少见的动画视图控制器之一,通过它既可以创建类似UIScrollView与UIPageControl结合的滚屏视图,也可以创建类似图书效果的炫酷翻页视图。UIPageViewController类似一个视图容器,其中每个具体的视图由各自的ViewController进行维护管理,UIPageViewController只进行协调与动画布置。下图可以很好的展现出UIPageViewControlelr的使用结构:
珲少
2018/08/15
2.3K0
iOS翻页视图控制器UIPageViewController的应用
聊聊iOS开发之MVVM的架构设计
而MVVM这种新的代码组织方式就可以解决这些问题,本文就MVVM的架构设计做个简单的个人总结。
進无尽
2018/09/12
8.8K0
聊聊iOS开发之MVVM的架构设计
iOS开发之CoreMotion框架的应用 原
      我们知道,现在智能手机手机的功能已经越来越强大。小小的手机中集成了众多的传感器配件。通过这些传感器可以获取到手机甚至用户的状态信息。
珲少
2019/03/12
1.6K0
iOS开发之CoreMotion框架的应用
                                                                            原
iOS的MVC框架之控制层的构建(下)
在我的iOS的MVC框架之控制层的构建(上)一文中介绍了一些控制层的构建方法,而这篇文章则继续对一些方法进行展开讨论。MVC被众多开发者所诟病的C层的膨胀,究其原因不外乎有如下几点:
欧阳大哥2013
2018/08/22
4.5K0
iOS中UIPopoverController使用详解
        UIPopoverController是Pad设备中常用的一种视图控制器,其在UI表现上为在当前视图控制器上面弹出一个子视图控制器,通常用来展示交互列表。示例如下图:
珲少
2018/08/15
1.8K0
iOS中UIPopoverController使用详解
iOS中UISearchBar(搜索框)使用总结
初始化:UISearchBar继承于UIView,我们可以像创建View那样创建searchBar
珲少
2018/08/16
2.7K0
iOS中UISearchBar(搜索框)使用总结
iOS开发UI之日期控件的使用(UIDatePicker)
@property (nonatomic) UIDatePickerMode datePickerMode; 
珲少
2018/08/15
1.1K0
相关推荐
iOS开发之EventKit框架的应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验