1

我在使用 JT Apple Calendar 选择要在 CalendarKit 中显示的日期时遇到问题。标签将显示正确的日期,但其上方的日期选择器不反映标签显示的日期。

有没有简单的方法来解决这个问题?我被告知这可能是一个错误。

日期滚动条似乎采用当前日期,而不是选择的日期。我选择了 2017 年 1 月 19 日,但日期滚动条显示 2017 年 12 月 2 日,即今天的日期。

这是供参考的软件包主页: https ://github.com/richardtop/CalendarKit

在此处输入图像描述

这是代码的相关部分,其中 selectedDate 是显示在标签中并从 JTAppleCalendar 传递的日期:

var selectedDate:日期!var selectedEvent: 事件!var newEventDate: 日期!

override func viewDidLoad() {
    super.viewDidLoad()

    dayView.autoScrollToFirstEvent = true
    navigationController?.navigationBar.backgroundColor = .white
    reloadData()
    loadForSelectedDate(date: selectedDate)
}


func loadForSelectedDate(date: Date) {
    dayView.state = DayViewState(date: date)
    dayView.state?.move(to: date)
    dayView.reloadData()
}
4

2 回答 2

3

我认为您正在视图之间进行更改,因为我也在做同样的事情,并且我这样做了:在您的DayViewController使用中viewDidAppear而不是viewDidLoad这样的东西:

override func viewDidAppear(_ animated: Bool) {
    let dateJT = //your date variable from JTAppleCalendar
    dayView.state?.move(to: dateJT!)
}
于 2017-12-21T02:57:38.347 回答
0

CalendarKit 使用一个名为DayViewState的单独对象以同步方式更新其所有视图。

滚动条上的标签没有更新的原因是没有调用DayViewState上的相应方法。最有可能的是,您试图move(from oldDate: Date, to newDate: Date) 仅调用CalendarKit的组件之一。

更改DayView的所有元素(时间轴、滚动条和 TimeLabel)上的日期的正确方法是在DayViewState上调用此方法:

let date = // Get Date from JTAppleCalendar
// Set date to all the elements of the CalendarKit
dayView.state?.move(to: date)

更新代码示例

我发现了几个不按预期方式使用 CalendarKit 的情况。

我已经对您的代码片段进行了评论,以更好地了解如何更改它:

func loadForSelectedDate(date: Date) {
    // No need to create a new state. DayView creates and configures its own state, and automatically links all the components together.
    // dayView.state = DayViewState(date: date)

    // Just call this method to move to the needed date
    dayView.state?.move(to: date)

    // No need to call `reloadData()` as the DayView will ask the DataSource automatically when the selected date is reached.
    // dayView.reloadData()
}

在所有修改之后,它可以缩短为一行:

func loadForSelectedDate(date: Date) {
    // Just call this method to move to the needed date
    dayView.state?.move(to: date)
}

尽管如此,您的代码应该可以工作(即使您正在创建一个新状态),所以您肯定发现了库中的一个错误。

于 2017-12-02T06:57:29.327 回答