Widget作成メモ(8)ーカレンダーイベントのリスト要素の表示
こんにちは。川上です。
さて、カレンダーイベントのリスト要素取得表示のI/Fの続きからです。
前回分のカレンダーイベントの許可認識処理を組み込んでの、今日明日のカレンダーイベント項目の取得処理。
ダァーと、一気に、記載しますwね
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | // MARK: - ⭐️ +++ カレンダーイベントの取得 static func getCalenderEventStr() -> String { var dstr = "今日明日の予定は\nありません。" let weekstr :[String] = [ "日", "月", "火", "水", "木", "金", "土"] // ユーザーにカレンダーの使用の許可を求める. let bret = allowAuthorization() if bret == false { print(#function + "error") return "err-無し" } // NSCalendarを生成. let myCalendar: NSCalendar = NSCalendar.current as NSCalendar // 終了日(一年後)コンポーネントの生成. let oneYearFromNowComponents: NSDateComponents = NSDateComponents() oneYearFromNowComponents.year = 1 // 開始日(昨日)コンポーネントの生成. let oneDayAgoComponents: NSDateComponents = NSDateComponents() oneDayAgoComponents.day = -1 // 今日から一年後までのNSDateを生成. let oneYearFromNow: NSDate = myCalendar.date(byAdding: oneYearFromNowComponents as DateComponents, to: NSDate() as Date, options: NSCalendar.Options.matchLast)! as NSDate // 昨日から今日までのNSDateを生成. let oneDayAgo: NSDate = myCalendar.date(byAdding: oneDayAgoComponents as DateComponents, to: NSDate() as Date, options: NSCalendar.Options.matchLast)! as NSDate // イベントストアのインスタンスメソッドで述語を生成. var predicate = NSPredicate() predicate = myEventStore.predicateForEvents(withStart: oneDayAgo as Date, end: oneYearFromNow as Date, calendars: nil) // カレンダーイベント のListの表示 let events = myEventStore.events(matching: predicate) // 発見したイベントを格納する配列を生成. var eventEKItems = [EKEvent]() // イベントが見つかった. // -- 今日 let nowdaystr = CF_Lib.convertNSDateToString(date: Date() as NSDate) // -- 明日 let towdate = Calendar.current.date(byAdding: .day, value: 1, to: Date())! let towdaystr = CF_Lib.convertNSDateToString(date: towdate as NSDate) if !events.isEmpty { for evt in events { let curdate = evt.startDate let curstr = CF_Lib.convertNSDateToString(date: curdate! as NSDate) // Today Event if nowdaystr == curstr || towdaystr == curstr { eventEKItems.append(evt) } //nowdaystr == curstr } // for evt in events // +++ 今日のイベント if eventEKItems.count > 0 { dstr = "" var dspnum = 0 print("--- eventEKItems.count = \(eventEKItems.count)") for (_,evt) in eventEKItems.enumerated() { //日付の文字列をDate型にする let date1 = Date() let date2 = evt.endDate // NSDate(日時)の比較 if ( date1.compare(date2!) == .orderedDescending ) { print("date1が後") continue } if dspnum > 1 { dstr += "..他" break } let today_tpl = CF_Lib.convertNSDateToYMDHMS_Weekday(date: date1 as NSDate) let curdate = evt.startDate let getstr = evt.title.description print(getstr) let day_tpl = CF_Lib.convertNSDateToYMDHMS_Weekday(date: curdate! as NSDate) var day_str = String(format: "・ %02d/%02d(%@) %02d:%02d\n", day_tpl.mth ,day_tpl.day ,weekstr[day_tpl.weekday] ,day_tpl.hh ,day_tpl.min) if today_tpl.day == day_tpl.day { day_str = String(format: "⭐️%02d/%02d(%@) %02d:%02d\n", day_tpl.mth ,day_tpl.day ,weekstr[day_tpl.weekday] ,day_tpl.hh ,day_tpl.min) } // --- Date disp dstr += day_str // ---- Title disp let from = getstr.index(getstr.startIndex, offsetBy:0) let to = getstr.index(getstr.startIndex, offsetBy: getstr.count >= 10 ? 10 : getstr.count) let newString = String(getstr[from..<to]) dstr += " " + newString + ".." dstr += "\n" dspnum += 1 } // for evt in eventEKItems } // / +++ 今日のイベント } // if !events.isEmpty if dstr == "" { dstr = "今日明日の予定は\nありません。" } return dstr } // +++ getCalenderEventStr() |
「今日明日のカレンダーイベント項目の取得処理」IF
CFLib_Mgr.getCalenderEventStr()
を、Widgetの表示メンバにくっつけます。
1 2 3 4 5 6 7 8 9 10 11 12 | // MARK: ⚡️ == タイムラインを定義 func getTimeline(・・) { ・・・・・・ let entry = SimpleEntry(date: entryDate, configuration: configuration ,myDayString: CFLib_Mgr.getTodayString() ,myCalenderString:CFLib_Mgr.getCalenderEventStr()) // ← カレンダイベントの表示 ・・・・ } |
・・・・ 次回は、お・ま・けのWidget表示処理が少々。。
ではでは。