Swift 4.2 EventKit在UITableView didSelectRowAt上获取所选日历的所有事件

问题描述 投票:0回答:1

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

如何判断该功能只能查看我在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)
        }
    }
}
ios swift eventkit
1个回答
1
投票

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

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]()
© www.soinside.com 2019 - 2024. All rights reserved.