1

Having trouble adding events, using CalendarKit. Trying to plot a testing event and it does not display. Docs say that CalendarKit requires an CalendarKit requires EventDataSource to return an array of objects conforming to EventDescriptor protocol, ive tried that no luck.

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

Any help is greatly appreciated thanks!

4

1 回答 1

0

看起来您正在使用CalendarKitSwiftUI。截至目前,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)

为了解决您的问题,我建议进行以下更改:

  1. DayViewDataSource在 UIKit 域中实现和任何其他 CalendarKit 交互。
  2. 将您的自定义子类桥DayViewController接到 SwiftUI 并在 SwiftUI 域中使用该子类(类似于您在代码片段中提供的方式)
于 2021-02-25T14:40:01.367 回答