【问题标题】:Swift 4.2 EventKit get all Events to the selected calendar on TableView didSelectedRowAtSwift 4.2 EventKit 将所有事件获取到 TableView didSelectedRowAt 上的选定日历
【发布时间】:2019-03-20 15:41:28
【问题描述】:

我将所有日历加载到一个表格视图中,其中每个日历都表示在一个单元格中。 现在我想在点击单元格时打印单元格日历的所有事件。 问题是,通过您看到的代码,我得到了 all 日历的事件。

如何告诉函数只查看我在 tableview 中点击的日历?

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let calendarTitle = calendars![indexPath.row].title
    print(calendarTitle)
    let calendar = Calendar.current
    print("Current \(calendar)")

    var oneDayAgoComponents = DateComponents()
    oneDayAgoComponents.day = -1
    let oneDayAgo = calendar.date(byAdding: oneDayAgoComponents, to: Date())

    var oneDayFromNowComponents = DateComponents()
    oneDayFromNowComponents.day = 7
    let oneDayFromNow = calendar.date(byAdding: oneDayFromNowComponents, to: Date())

    var predicate: NSPredicate? = nil
    if let anAgo = oneDayAgo, let aNow = oneDayFromNow {
        predicate = eventStore.predicateForEvents(withStart: anAgo, end: aNow, calendars: nil)

    }

    var events: [EKEvent]? = nil
    if let aPredicate = predicate {
        events = eventStore.events(matching: aPredicate)

        for event in events! {
            print(event.title)
        }
    }
}

【问题讨论】:

  • predicate = eventStore.predicateForEvents(withStart: anAgo, end: aNow, calendars: nil) 不考虑您选择的日历?

标签: ios swift eventkit


【解决方案1】:

你必须在predicateForEventscalendars参数中传递日历

let rowCalendar = calendars![indexPath.row]
let calendarTitle = rowCalendar.title
print(calendarTitle)

...

if let anAgo = oneDayAgo, let aNow = oneDayFromNow {
    predicate = eventStore.predicateForEvents(withStart: anAgo, end: aNow, calendars: [rowCalendar])
}

并且请将数据源数组声明为非可选空数组,因为无论如何您都强制解包

var calendars = [EKCalendar]()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多