【问题标题】:CalendarKit SwiftUI EventsCalendarKit SwiftUI 事件
【发布时间】:2021-02-24 01:23:21
【问题描述】:

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

非常感谢任何帮助!

【问题讨论】:

    标签: swiftui calendarkit


    【解决方案1】:

    看起来您正在使用 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 域中使用该子类(类似于您在代码 sn-p 中提供的方式)

    【讨论】:

      猜你喜欢
      • 2022-06-25
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多