zoukankan      html  css  js  c++  java
  • 用户数据攻略-获取日历事件

    #import <UIKit/UIKit.h>
    #import <EventKit/EventKit.h>
    #import <EventKitUI/EventKitUI.h>
    
    @interface ViewController : UIViewController<UITableViewDelegate, UITableViewDataSource, EKEventEditViewDelegate, UIAlertViewDelegate>
    
    @property (strong, nonatomic) EKEventStore *eventStore;
    @property (weak, nonatomic) IBOutlet UITableView *eventsTableView;
    @property (nonatomic, strong) NSMutableDictionary *events;
    @property (nonatomic, strong) NSArray *calendars;
    
    @end
      1 //
      2 //  ViewController.m
      3 //  My Events App
      4 //
      5 //  Created by Hans-Eric Grönlund on 8/27/12.
      6 //  Copyright (c) 2012 Hans-Eric Grönlund. All rights reserved.
      7 //
      8 
      9 #import "ViewController.h"
     10 
     11 @interface ViewController ()
     12 
     13 @end
     14 
     15 @implementation ViewController
     16 
     17 - (void)viewDidLoad
     18 {
     19     [super viewDidLoad];
     20     self.title = @"Events";
     21     UIBarButtonItem *refreshButton = [[UIBarButtonItem alloc]
     22                                       initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self
     23                                       action:@selector(refresh:)];
     24     self.navigationItem.leftBarButtonItem = refreshButton;
     25     
     26     UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addEvent:)];
     27     self.navigationItem.rightBarButtonItem = addButton;
     28     
     29     self.eventsTableView.delegate = self;
     30     self.eventsTableView.dataSource = self;
     31     
     32     self.eventStore = [[EKEventStore alloc] init];
     33     
     34     [self.eventStore requestAccessToEntityType:EKEntityTypeEvent
     35                                     completion:^(BOOL granted, NSError *error)
     36      {
     37          if (granted)
     38          {
     39              self.calendars =
     40              [self.eventStore calendarsForEntityType:EKEntityTypeEvent];
     41              [self fetchEvents];
     42          }
     43          else
     44          {
     45              NSLog(@"Access not granted: %@", error);
     46          }
     47      }];
     48 }
     49 
     50 - (void)refresh:(id)sender
     51 {
     52     [self fetchEvents];
     53     [self.eventsTableView reloadData];
     54 }
     55 
     56 - (void)fetchEvents
     57 {
     58     self.events = [[NSMutableDictionary alloc] initWithCapacity:[self.calendars count]];
     59     
     60     NSDate * now = [NSDate date];
     61     NSCalendar * calendar = [NSCalendar currentCalendar];
     62     
     63     NSDateComponents * fortyEightHoursFromNowComponents =
     64     [[NSDateComponents alloc] init];
     65     fortyEightHoursFromNowComponents.day = 2; // 48 hours forward
     66     NSDate * fortyEightHoursFromNow =
     67     [calendar dateByAddingComponents:fortyEightHoursFromNowComponents toDate:now
     68                              options:0];
     69     
     70     
     71     
     72     for (EKCalendar * calendar in self.calendars)
     73     {
     74         NSPredicate * allEventsWithin48HoursPredicate =
     75         [self.eventStore predicateForEventsWithStartDate:now
     76                                                  endDate:fortyEightHoursFromNow calendars:@[calendar]];
     77         NSArray * eventsInThisCalendar =
     78         [self.eventStore eventsMatchingPredicate:allEventsWithin48HoursPredicate];
     79         if (eventsInThisCalendar != nil)
     80         {
     81             [self.events setObject:eventsInThisCalendar forKey:calendar.title];
     82         }
     83     }
     84     dispatch_async(dispatch_get_main_queue(),^{
     85         [self.eventsTableView reloadData];
     86     });
     87 }
     88 
     89 - (void)addEvent:(id)sender
     90 {
     91     UIAlertView * inputAlert = [[UIAlertView alloc] initWithTitle:@"New Event" message:@"Enter a title for the event" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
     92     inputAlert.alertViewStyle = UIAlertViewStylePlainTextInput;
     93     [inputAlert show];
     94 }
     95 
     96 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
     97 {
     98     if (buttonIndex == 1)
     99     {
    100         // OK button tapped
    101         
    102         // Calculate the date exactly one day from now
    103         NSCalendar * calendar = [NSCalendar currentCalendar];
    104         NSDateComponents * aDayFromNowComponents = [[NSDateComponents alloc] init];
    105         aDayFromNowComponents.day = 1;
    106         NSDate * now = [NSDate date];
    107         NSDate * aDayFromNow = [calendar dateByAddingComponents:aDayFromNowComponents toDate:now options:0];
    108         
    109         // Create the event
    110         EKEvent * event = [EKEvent eventWithEventStore:self.eventStore];
    111         event.title = [alertView textFieldAtIndex:0].text;
    112         event.calendar = [self.eventStore defaultCalendarForNewEvents];
    113         event.startDate = aDayFromNow;
    114         event.endDate = [NSDate dateWithTimeInterval:60*60.0 sinceDate:event.startDate];
    115         
    116         // Make it recur
    117         EKRecurrenceRule *repeatEveryMondayAndTuesdayRecurrenceRule = [[EKRecurrenceRule alloc]
    118             initRecurrenceWithFrequency:EKRecurrenceFrequencyDaily
    119             interval:2
    120             daysOfTheWeek:@[[EKRecurrenceDayOfWeek dayOfWeek:2], [EKRecurrenceDayOfWeek dayOfWeek:3]]
    121             daysOfTheMonth:nil
    122             monthsOfTheYear:nil
    123             weeksOfTheYear:nil
    124             daysOfTheYear:nil
    125             setPositions:nil
    126             end:[EKRecurrenceEnd recurrenceEndWithOccurrenceCount:20]];
    127         event.recurrenceRules = @[repeatEveryMondayAndTuesdayRecurrenceRule];
    128 
    129         // Save the event and update the table view
    130         [self.eventStore saveEvent:event span:EKSpanThisEvent error:nil];
    131         [self refresh:self];
    132     }
    133 }
    134 
    135 - (EKCalendar *)calendarAtSection:(NSInteger)section
    136 {
    137     return [self.calendars objectAtIndex:section];
    138 }
    139 
    140 - (EKEvent *)eventAtIndexPath:(NSIndexPath *)indexPath
    141 {
    142     EKCalendar *calendar = [self calendarAtSection:indexPath.section];
    143     NSArray *calendarEvents = [self eventsForCalendar:calendar];
    144     return [calendarEvents objectAtIndex:indexPath.row];
    145 }
    146 
    147 - (NSArray *)eventsForCalendar:(EKCalendar *)calendar
    148 {
    149     return [self.events objectForKey:calendar.title];
    150 }
    151 
    152 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    153 {
    154     return [self.calendars count];
    155 }
    156 
    157 -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
    158 {
    159     return [self calendarAtSection:section].title;
    160 }
    161 
    162 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    163 {
    164     EKCalendar *calendar = [self calendarAtSection:section];
    165     return [self eventsForCalendar:calendar].count;
    166 }
    167 
    168 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    169 {
    170     static NSString *CellIdentifier = @"Cell";
    171     
    172     UITableViewCell *cell =
    173     [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    174     if (cell == nil)
    175     {
    176         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
    177                                       reuseIdentifier:CellIdentifier];
    178     }
    179     
    180     cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
    181     cell.textLabel.backgroundColor = [UIColor clearColor];
    182     cell.textLabel.font = [UIFont systemFontOfSize:19.0];
    183     
    184     cell.textLabel.text = [self eventAtIndexPath:indexPath].title;
    185     
    186     return cell;
    187 }
    188 
    189 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    190 {
    191     EKEventViewController *eventVC = [[EKEventViewController alloc] init];
    192     eventVC.event = [self eventAtIndexPath:indexPath];
    193     eventVC.allowsEditing = YES;
    194     [self.navigationController pushViewController:eventVC animated:YES];
    195     [tableView deselectRowAtIndexPath:indexPath animated:YES];
    196 }
    197 
    198 - (void)viewWillAppear:(BOOL)animated
    199 {
    200     [self refresh:self];
    201     [super viewWillAppear:animated];
    202 }
    203 
    204 -(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
    205 {
    206     EKEventEditViewController *eventEditVC = [[EKEventEditViewController alloc] init];
    207     eventEditVC.event = [self eventAtIndexPath:indexPath];
    208     eventEditVC.eventStore = self.eventStore;
    209     eventEditVC.editViewDelegate = self;
    210     [self presentViewController:eventEditVC animated:YES completion:nil];
    211 }
    212 
    213 -(void)eventEditViewController:(EKEventEditViewController *)controller didCompleteWithAction:(EKEventEditViewAction)action
    214 {
    215     [self dismissViewControllerAnimated:YES completion:nil];
    216 }
    217 
    218 -(EKCalendar *)eventEditViewControllerDefaultCalendarForNewEvents:
    219 (EKEventEditViewController *)controller
    220 {
    221     return [self.eventStore defaultCalendarForNewEvents];
    222 }
    223 
    224 - (void)didReceiveMemoryWarning
    225 {
    226     [super didReceiveMemoryWarning];
    227     // Dispose of any resources that can be recreated.
    228 }
    229 
    230 @end

  • 相关阅读:
    Activiti 整合的小插曲
    IDEA 提示找不到 javax 等 tomcat 的相关包
    一些好用的 Oracle 批处理和语句
    Oracle 日志报错导致的 “没有登录” 问题
    WebPack 从安装到闲置
    CHENEY-YANG'S BLOG(cheney-yang)
    Java基础知识常识总结
    激活Navicat
    IDEA文件头版权模板
    关于Spring框架中StringUtils常用/易误用方法解析
  • 原文地址:https://www.cnblogs.com/fengmin/p/5591566.html
Copyright © 2011-2022 走看看