微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CalendarKit SwiftUI 事件

如何解决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)

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。