美文网首页
iOS 14 一行代码填加提醒事项,日历提醒等功能(含源码解析)

iOS 14 一行代码填加提醒事项,日历提醒等功能(含源码解析)

作者: Kpengs | 来源:发表于2023-02-15 16:44 被阅读0次

工具代码地址:

https://github.com/PZXforXcode/PZXEventAddManagera

使用方法:

PZXEventAddManager文件夹放入项目中

添加权限:

Privacy - Calendars Usage Description

Privacy - Reminders Usage Description

    PZXEventAddManager.sharedManager.ReminderCalendarAdd(title: "事项列表")
    PZXEventAddManager.sharedManager.reminderAdd(calendartitle: "事项列表", title: "测试标题", notes: "测试备注", date: Date())

可添加 提醒事项,日历提醒,自定义标题,备注,提醒时间

代码解析:

1.建立EKEventStore单例

class PZXEventStore: NSObject {
  static let eventStore = EKEventStore()
  ///用户是否授权使用日历
  func isEventStatus() -> Bool {
    let eventStatus = EKEventStore.authorizationStatus(for: EKEntityType.event)
    if eventStatus == .denied || eventStatus == .restricted {
      return false
    }
    return true
  }
  ///用户是否授权使用提醒事项
  func isReminderStatus() -> Bool {
    let eventStatus = EKEventStore.authorizationStatus(for: EKEntityType.reminder)
    if eventStatus == .denied || eventStatus == .restricted {
      return false
    }
    return true
  }
}

添加提醒事项列表

///找到提醒事项所有列表
     let array = PZXEventStore.eventStore.calendars(for: .reminder)
    for calendar :EKCalendar in array {
      print("列表:\(calendar.title)")
     //如果已经有这个calendar了 就不添加了
     if calendar.title == title {
        return
      }
   }     
  //添加提醒事项列表
    let calendar = EKCalendar.init(for: .reminder, eventStore: PZXEventStore.eventStore);
    if PZXEventStore.eventStore.sources.count == 0 { // reproducible after Reset Content and Settings
       calendar.source = EKSource()
      }else {
        calendar.source = PZXEventStore.eventStore.defaultCalendarForNewReminders()!.source
      }
    //添加标题
    calendar.title = title
    //添加颜色
    calendar.cgColor = UIColor.red.cgColor     
    do{
      //进行添加
      try PZXEventStore.eventStore.saveCalendar(calendar, commit: true)
     debugPrint("成功加入")
    }catch {
      debugPrint(error)
    }

添加提醒事项

        let reminder = EKReminder.init(eventStore: PZXEventStore.eventStore);
        reminder.title = title;
        reminder.notes = notes
        
        if (calendartitle.count == 0){
            reminder.calendar = PZXEventStore.eventStore.defaultCalendarForNewReminders();
        }else {
            
            let array =  PZXEventStore.eventStore.calendars(for: .reminder)
            for calendar :EKCalendar in array {
                //如果已经有这个calendar了 就不添加了
                if calendar.title == calendartitle {
                    reminder.calendar = calendar;
                }
            }
            
        }

        let alarm = EKAlarm(absoluteDate: date)
        reminder.addAlarm(alarm)
        do {
          try PZXEventStore.eventStore.save(reminder, commit: true)
        } catch {
          print("save reminder error: \(error)")
        }

判断权限

 PZXEventStore.eventStore.requestAccess(to: .reminder) { (granted, error) in
            
            if !granted {
                let alertViewController = UIAlertController(title: "提示", message: "请在iPhone的\"设置->隐私->提醒事项\"选项中,允许访问你的提醒事项。", preferredStyle: .alert)
                let actionCancel = UIAlertAction(title: "取消", style: .cancel, handler: { (action) in
                })
                let actinSure = UIAlertAction(title: "设置", style: .default, handler: { (action) in
                    //跳转到系统设置主页
                    if let url = URL(string: UIApplication.openSettingsURLString) {
                        //根据iOS系统版本,分别处理
                        if #available(iOS 10, *) {
                            UIApplication.shared.open(url)
                        } else {
                            UIApplication.shared.openURL(url)
                        }
                    }
                })
                alertViewController.addAction(actionCancel)
                alertViewController.addAction(actinSure)
                // FIXME: - 弹出这个alertViewController
            }
            
            
        }
        
    }

相关文章

网友评论

      本文标题:iOS 14 一行代码填加提醒事项,日历提醒等功能(含源码解析)

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