iOS開發之EventKitUI框架的應用

iOS開發之EventKitUI框架的應用

      前面博客,有介紹EventKit這個框架的使用,使用EventKit能夠與系統的日曆和提醒應用進行交互,讀寫用戶的日程事件。EventKitUI,顧名思義,其實基於EventKit框架,提供了一套系統的事件管理界面。EventKit的基礎內容介紹以下:框架

http://www.javashuo.com/article/p-kubjnjza-ct.htmlui

1、EKCalendarChooser日曆選擇頁面

      EKCalendarChooser提供了選擇日曆,即選擇EKCalendar對象的視圖控制器,示例以下:atom

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對象,用來進行數據操做。spa

EKCalendarChooser中屬性方法以下:.net

// 實例化方法
/*
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

2、EKEventViewController事件詳情頁面

      EKEventViewController提供了展現某個事件詳情的試圖控制器,示例以下:code

- (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中只定義了一個方法,以下:blog

@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

3、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
相關文章
相關標籤/搜索