Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 带有日期滚动条的CalendarKit问题-Swift_Ios_Swift_Swift3_Jtapplecalendar_Calendarkit - Fatal编程技术网

Ios 带有日期滚动条的CalendarKit问题-Swift

Ios 带有日期滚动条的CalendarKit问题-Swift,ios,swift,swift3,jtapplecalendar,calendarkit,Ios,Swift,Swift3,Jtapplecalendar,Calendarkit,我一直在使用JT Apple Calendar选择要在CalendarKit中显示的日期时遇到问题。标签将显示正确的日期,但其上方的日期选择器不反映标签显示的日期 有没有简单的方法来解决这个问题?有人告诉我这可能是一只虫子 日期滚动条似乎采用当前日期,而不是选择的日期。我选择了2017年1月19日,但日期滚动条显示2017年12月2日,即今天的日期 这是供参考的程序包主页: 以下是代码的相关部分,其中selectedDate是标签中显示的日期,并从JTAppleCalendar传递: var

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

有没有简单的方法来解决这个问题?有人告诉我这可能是一只虫子

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

这是供参考的程序包主页:

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

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

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()
}

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

滚动条上的标签不是更新的原因是没有调用DayViewState上的相应方法。很可能,您正在尝试调用
move(从oldDate:Date到newDate:Date)
仅在CalendarKit的一个组件上

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

更新代码示例

我发现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)
}

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

我认为您正在不同视图之间切换,因为我也在这样做,我做到了: 在您的
DayViewController
中,使用
viewDidAppear
而不是
viewDidLoad
如下所示:

override func viewDidAppear(_ animated: Bool) {
    let dateJT = //your date variable from JTAppleCalendar
    dayView.state?.move(to: dateJT!)
}

那么你是在使用JTAppleCalendar吗?或者您使用的是CalendarKit?很抱歉造成混淆,我使用的是JTAppleCalendar将日期传递到CalendarKit页面,但日期滚动条不反映传递的日期传递的日期是早一个日期吗?一天后?完全错了?如果休息一天,那么这可能与此有关?->碰巧我点击的日期接近当前日期。滚动条对应于当前日期,而标签对应于我在JTAppleCalendar上选择的日期。但是,我找不到设置日期滚动条日期的设置。我不太清楚你所说的滚动条是什么意思。你能总结一下这个问题吗?你是说你点击JTAppleCalendar的日期不正确吗?谢谢你的回答。我添加了代码的相关部分,以显示我所做的工作,并且它似乎应该根据您给出的示例工作。selectedDate是JTAppleCalendar中的日期,它似乎适用于标签,但不适用于滚动条。我已更新了答案,请尝试我提供的代码片段,看看它是否正常工作?我尝试了您的代码片段,但滚动条仍然没有反映标签日期,而是反映当前日期。有没有办法更改库本身以反映正确的日期?或者您对每小时日历还有其他建议?好的,非常感谢您的帮助,我非常感谢itThanks@Luis,您的解决方案很有效,当我打开DayViewController时,我可以在特定的日期继续,如果我在viewDidLoad方法中放入dayView.state?.move(to:date)代码时没有发生任何事件,我也可以看到该日期的事件
override func viewDidAppear(_ animated: Bool) {
    let dateJT = //your date variable from JTAppleCalendar
    dayView.state?.move(to: dateJT!)
}