如何解决CalendarKit SwiftUI 事件
使用 CalendarKit 添加事件时遇到问题。试图绘制一个测试事件,但它没有显示。文档说 CalendarKit 需要 CalendarKit 需要 EventDataSource 返回符合 EventDescriptor 协议的对象数组,我试过没有运气。
import SwiftUI
import CalendarKit
import UIKit
struct TestingCalendarController: UIViewControllerRepresentable {
@Binding var eventDates: [Date]
func makeCoordinator() -> Coordinator {
return Coordinator()
}
func makeUIViewController(context: Context) -> DayViewController {
var dayView = DayViewController()
dayView.delegate = context.coordinator
var style = CalendarStyle()
style.timeline.timeIndicator.color = .systemBlue
style.header.daySelector.todayActiveTextColor = .white
style.header.daySelector.selectedBackgroundColor = UIColor(.primary)
style.header.daySelector.todayInactiveTextColor = .systemBlue
style.header.daySelector.todayActiveBackgroundColor = .systemBlue
style.header.swipeLabel.font = .systemFont(ofSize: 0.0)
dayView.updateStyle(style)
var testingEvents: [Event] = [Event]()
var event = Event()
event.startDate = Date()
event.endDate = Date()
event.isAllDay = true
event.text = "Testing Event"
dayView.create(event: event)
return dayView
}
func updateUIViewController(_ dayView: DayViewController,context: Context) {
dayView.delegate = context.coordinator
}
class Coordinator: NSObject,DayViewDelegate {
func dayViewDidSelectEventView(_ eventView: EventView) {
}
func dayViewDidLongPressEventView(_ eventView: EventView) {
}
func dayView(dayView: DayView,didTapTimelineAt date: Date) {
}
func dayView(dayView: DayView,didLongPresstimelineAt date: Date) {
}
func dayViewDidBeginDragging(dayView: DayView) {
}
func dayViewDidTransitionCancel(dayView: DayView) {
}
func dayView(dayView: DayView,willMoveto date: Date) {
print("Date \(date)")
}
func dayView(dayView: DayView,didMoveto date: Date) {
}
func dayView(dayView: DayView,didUpdate event: EventDescriptor) {
}
}
}
非常感谢任何帮助,谢谢!
解决方法
您似乎将 CalendarKit
与 SwiftUI 结合使用。
目前,SwiftUI 不支持开箱即用。
此外,这个 API 的目的是为用户提供动画/手势处理,它实际上并不在数据源中创建事件。
dayView.updateStyle(style)
var testingEvents: [Event] = [Event]()
var event = Event()
event.startDate = Date()
event.endDate = Date()
event.isAllDay = true
event.text = "Testing Event"
dayView.create(event: event)
为了解决您的问题,我建议进行以下更改:
- 在 UIKit 域中实现
DayViewDataSource
和任何其他 CalendarKit 交互。 - 将
DayViewController
的自定义子类桥接到 SwiftUI 并在 SwiftUI 域中使用该子类(类似于您在代码片段中提供的方式)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。