美文网首页
swift版-系统的日历和提醒事项的调用与交互

swift版-系统的日历和提醒事项的调用与交互

作者: nick5683 | 来源:发表于2021-11-25 16:21 被阅读0次

    一、打开系统的app

    //        1、打开日历:
            if UIApplication.shared.canOpenURL(URL(string:"calshow:")!) {
                UIApplication.shared.open(URL(string:"calshow:")!, options: [:], completionHandler: nil)
             }
    
    //        2、打开提醒事项:
            if UIApplication.shared.canOpenURL(URL(string:"x-apple-reminder://")!) {
                UIApplication.shared.open(URL(string:"x-apple-reminder://")!, options: [:], completionHandler: nil)
            }
    

    二、向系统的日历或提醒事项中添加信息:
    1、向日历中添加事件:

    
    (1)、创建事件驱动器:
     let eventStore = EKEventStore()
    
    (2)、授权访问日历:
     eventStore.requestAccessToEntityType(.Event) { (result, erro) in  }
    
    (3)、编辑事件:
       let event = EKEvent(eventStore: self.eventStore)
       // 事件名称
       event.title = "提醒" // 事件名称
       event.notes = "备注你妹" // 事件备注
    
       // 事件地点
       event.location = "东升科技园"
    
       // 这个设置为true 开始结束时间就不会显示
       event.allDay = true
    
       // 开始时间
       event.startDate = NSDate()
       // 结束时间
       event.endDate   = NSDate(timeIntervalSinceNow: 3600)
    
       event.addAlarm(EKAlarm(relativeOffset: -60*15))  //  设置提醒
     
       // 必须设置:系统的日历
       event.calendar = self.eventStore.defaultCalendarForNewEvents
    
    (4)、添加日历事件:
       do {
            let _ = try self.eventStore.saveEvent(event, span: .ThisEvent)
                        
       } catch {
            print(error)
     }
    
    (5)、删除日历事件:
    do {
        let _ = try self.eventStore.remove(event, span: .thisEvent)           
    } catch {
         print(error)
     }
    

    2、向事项中添加事件:

    (1)、创建事件驱动器:
     let eventStore = EKEventStore()
    
    (2)、授权访问提醒事项:
      eventStore.requestAccessToEntityType(.Reminder) { (result, erro) in  }
    
    (3)、编辑事项:
      let reminde = EKReminder(eventStore: self.eventStore)
                    
           // 事项名称
           reminde.title = "测试提醒"
           // 事项地点
           reminde.location = "东升科技园"
                    
           // 事项等级:1-9,1最高
           reminde.priority = 1
                    
            reminde.notes = "测试测试测试测试测试"
                     
            // 事项开始事件
             let start = NSDateComponents()
             start.day = 5
             start.year = 2016
             start.month = 9
             start.hour = 22
             start.minute = 30
             start.timeZone = NSTimeZone.systemTimeZone()
             reminde.startDateComponents = start
                    
             // 事项结束事件
             let end = NSDateComponents()
             end.day = 8
             end.year = 2016
             end.month = 9
             end.hour = 23
             end.minute = 30
             end.timeZone = NSTimeZone.localTimeZone()
             reminde.dueDateComponents = end
       // 说明:
       设置了结束时间,在事项中只会显示结束时间而不会显示开始时间
                    
        reminde.addAlarm(EKAlarm(relativeOffset: -60*15)) // 添加提醒时间
    
        // 必须要设置:默认的事项提示app
        reminde.calendar = self.eventStore.defaultCalendarForNewReminders()
    
    (4)、添加事项事件:
      do {
          let _ = try self.eventStore.saveReminder(reminde, commit: true)
                        
      } catch {
         print(error)
      }
    
    (5)、删除事项提示:
    do {
        let _ = try self.eventStore.remove((reminders?.first)!, commit: true)
    } catch {
        print(error)
    }
    

    三、查找系统的日历或提醒事项中信息:
    1、查找日历事件:

    (1)、创建事件驱动器:
    let eventStore = EKEventStore()
    
    (2)、授权访问日历:
    eventStore.requestAccessToEntityType(.Event) { (result, erro) in  }
    
    (3)、查找事件:
        1)、创建查找条件
    let predicate = self.eventStore.predicateForEvents(withStart: Date(timeIntervalSinceNow: -3600), end: Date(), calendars: nil)
    
        2)、利用条件进行查找:由于是线程同步,耗时长,建议在其他线程操作
         查找方法1:
         let events = self.eventStore.events(matching: predicate)
         查找方法2:每找到一个就会调用闭包
        self.eventStore.enumerateEvents(matching: predicate, using: { (event,pointer) in})
    
    

    2、查找提醒事项:

    (1)、创建事件驱动器:
     let eventStore = EKEventStore()
    
    (2)、授权访问提醒事项:
    eventStore.requestAccessToEntityType(.Reminder) { (result, erro) in  }
    
    (3)、查找事件:
          1)、创建查找条件
         /// 获取所有的事项条件
         let pre0 = self.eventStore.predicateForReminders(in: nil)
                    
         // 指定时间内未完成的事项条件
        let pre1 = self.eventStore.predicateForIncompleteReminders(withDueDateStarting: Date(timeIntervalSinceNow:3600), ending: Date(timeIntervalSinceNow:3600), calendars: nil)
                    
        // 指定时间内已完成的事项条件
       let pre2 = self.eventStore.predicateForCompletedReminders(withCompletionDateStarting: Date(timeIntervalSinceNow:-3600), ending: Date(timeIntervalSinceNow:3600), calendars: nil)
    
    2)、利用条件进行查找:由于是线程同步,耗时长,建议在其他线程操作
        /// 获取事项
        let _ = self.eventStore.fetchReminders(matching: pre0, completion: { (reminders) in })
    

    相关文章

      网友评论

          本文标题:swift版-系统的日历和提醒事项的调用与交互

          本文链接:https://www.haomeiwen.com/subject/jjxztrtx.html