首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从UIKIT向SwiftUI传递FSCalendar数据

如何从UIKIT向SwiftUI传递FSCalendar数据
EN

Stack Overflow用户
提问于 2021-01-10 20:17:17
回答 1查看 291关注 0票数 1

我是一名设计师,并试图开发一个待办事项列表应用程序。在应用程序中,用户选择日历中的某一天,它将显示所选日期的待办事项列表。但是,如何将选定的日期从FSCalendar(UIKIT)传递到待办事项列表(SwiftUI)?

非常感谢!

我在github中的应用演示:https://github.com/ElvishR/FSCalendar-To-Do-List-Test.git

内容视图:

代码语言:javascript
运行
复制
import SwiftUI
import Foundation

class UserData: ObservableObject{
    @Published var name = "Helsdfsflo"
}


struct ContentView: View {
    @ObservedObject var userData = UserData()
    var body: some View {
        
        Text(userData.name)
        Button(action:{
            print(self.userData.name)
        }){
            Text(" click to show the selected date")
        }
        CalendarModuleView()
            .frame(width: .infinity, height: 300.0, alignment: .center)
    }
}

日历视图

代码语言:javascript
运行
复制
import SwiftUI
import FSCalendar

class CalendarModule: UIViewController, FSCalendarDelegate {
    
    var calendar = FSCalendar()
    var formatter = DateFormatter()
    var SelectedDate = ""
    
    let integration = UserData()
    


    fileprivate lazy var dateFormatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy/MM/dd"
        return formatter
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        calendar.delegate = self
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        initCalendar()
        view.addSubview(calendar)
    }
    
    private func initCalendar() {
        calendar.frame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: 300.0)
        calendar.appearance.todayColor = UIColor.systemGreen   
        calendar.appearance.selectionColor = UIColor.systemBlue
    }
    
    //selected day
        func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition){
       // Do the same inside this function and you should be fine
        formatter.dateFormat = "yyyy-MM-dd"
        SelectedDate = formatter.string(from: date)
        ContentView().userData.name = formatter.string(from: date)
        print(ContentView().userData.name)
        print("calendar did select date \(self.formatter.string(from: date))")
        
      
    }
    
    func calendar(calendar: FSCalendar!, didSelectDate date: NSDate!) {
        formatter.dateFormat = "yyyy-MM-dd"
        SelectedDate = formatter.string(from: date as Date)
        print("(self.formatter.string(from: date))")
    }
   
}

应用程序屏幕截图enter image description here

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-10 21:05:24

使用UIViewRepresentable协议将UIView类与SwiftUI绑定。这是一个演示:

代码语言:javascript
运行
复制
struct CalendarModuleView: UIViewRepresentable {
    
    @Binding var selectedDate: Date?
    
    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }
    
    func makeUIView(context: Context) -> FSCalendar {
        let calendar = FSCalendar()
        calendar.delegate = context.coordinator
        calendar.appearance.todayColor = UIColor.systemGreen
        calendar.appearance.selectionColor = UIColor.systemBlue
        return calendar
    }
    
    func updateUIView(_ uiView: FSCalendar, context: Context) {
        
    }
    
    class Coordinator: NSObject, FSCalendarDelegate {
        
        var parent: CalendarModuleView
        
        init(_ calender: CalendarModuleView) {
            self.parent = calender
        }
        
        func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {
            self.parent.selectedDate = date
        }
    }
}

你的ContentView

代码语言:javascript
运行
复制
class UserData: ObservableObject{
    @Published var name = "Helsdfsflo"
    @Published var date: Date?
}


struct ContentView: View {
    
    @ObservedObject private var userData = UserData()
    
    static let taskDateFormat: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd"
        return formatter
    }()
    
    var body: some View {
        
        Text(userData.name)
        if userData.date != nil {
            Text("Task due date: \(userData.date!, formatter: Self.taskDateFormat)")
        }
        
        Button(action:{
            print(self.userData.name)
        }){
            Text(" click to show the selected date")
        }
        CalendarModuleView(selectedDate: $userData.date)
            .frame(height: 300.0, alignment: .center)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65653181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档