FSCalendar-从选择的日期开始向其他视图控制器创建序列

问题描述

我是编写iOS应用程序的初学者,目前正在使用FSCalendar开发日历应用程序。我希望我的应用程序每当在FSCalendar上点击所选日期时,都将转到下一个视图控制器(以显示有关所选日期的事件的详细信息),但是我找不到一种方法来创建与所选日期相关的序列到视图控制器。

在这种情况下,如果继续使用segue,我该怎么做?但是,如果segue不能做到这一点,请提出其他可能解决方案的建议。预先谢谢你!

解决方法

FSCalendar具有“选择日期”委托功能。如果您正在查看Swift Storyboard Sample,它将被调用并将格式化的日期打印到调试控制台。在那可以触发选择。

首先添加“详细信息”视图控制器类:

//
//  DetailViewController.swift
//  FSCalendarSwiftExample
//
//  Created by Don Mag on 8/31/20.
//

import UIKit

class DetailViewController: UIViewController {

    var selectedDate: Date?
    
    @IBOutlet var myLabel: UILabel!
    
    fileprivate let formatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy/MM/dd"
        return formatter
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        if let d = selectedDate {
            myLabel.text = formatter.string(from: d)
        }
    }

}

使用几个标签将一个视图控制器添加到情节提要中,将其类设置为DetailViewController,然后将“详细信息标签”连接到myLabel @IBOutlet

enter image description here

从FSCalendar视图控制器顶部的视图控制器图标中按住Ctrl并将其拖动到新的“详细视图控制器”,然后从弹出菜单中选择Show

enter image description here

您将看到已添加segue。选择该序列并将其标识为“ gotoDetail”:

enter image description here

InterfaceBuilderViewController类中,找到以下函数:

func calendar(_ calendar: FSCalendar,didSelect date: Date,at monthPosition: FSCalendarMonthPosition) {
    print("calendar did select date \(self.formatter.string(from: date))")
    if monthPosition == .previous || monthPosition == .next {
        calendar.setCurrentPage(date,animated: true)
    }
}

并在末尾添加performSegue行:

func calendar(_ calendar: FSCalendar,animated: true)
    }
    // add this line
    self.performSegue(withIdentifier: "gotoDetail",sender: nil)
}

仍在InterfaceBuilderViewController类中,找到prepare(for segue...函数:

override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
    if let config = segue.destination as? CalendarConfigViewController {
        config.lunar = self.lunar
        config.theme = self.theme
        config.selectedDate = self.calendar.selectedDate
        config.firstWeekday = self.calendar.firstWeekday
        config.scrollDirection = self.calendar.scrollDirection
    }
}

并在末尾添加以下代码:

override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
    if let config = segue.destination as? CalendarConfigViewController {
        config.lunar = self.lunar
        config.theme = self.theme
        config.selectedDate = self.calendar.selectedDate
        config.firstWeekday = self.calendar.firstWeekday
        config.scrollDirection = self.calendar.scrollDirection
    }
    // add this code
    if let detail = segue.destination as? DetailViewController {
        detail.selectedDate = calendar.selectedDate
    }
}

运行该应用程序,从表格视图中选择Interface Builder,然后选择一个日期。您应该将新的Detail控制器推入视图,它应该显示您选择的日期。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...