使用选择日期快速更新 FSCalendar 标头值

Posted

技术标签:

【中文标题】使用选择日期快速更新 FSCalendar 标头值【英文标题】:Update FSCalendar Header value with select date swift 【发布时间】:2021-09-14 13:58:16 【问题描述】:

我已将 FSCalendar 范围模式设置为周。在该标题日期格式之后,我设置了calendar.appearance.headerDateFormat = "dd MMMM yyyy EEEE" 它显示正确的格式。

我面临的问题是它给出了一周的开始日期。如果我选择任何日期,如何更新 Header 的值。 我还没有找到它的任何属性或方法。 我的选择日期是 2021 年 9 月 13 日,但标题日期是 2021 年 9 月 16 日。

添加了代码和图片。

func setupFSCalendar() 

        ViewCalendar.frame = CGRect(x: 0, y: 78, width: view.frame.width, height: 100)
        ViewCalendar.backgroundColor = ("#455a64").toColor()
        let calendar = FSCalendar(frame: CGRect(x: 0, y: 0, width: ViewCalendar.frame.width, height: 250))
        calendar.layoutIfNeeded()
        calendar.dataSource = self
        calendar.delegate = self
        calendar.appearance.weekdayTextColor = .white  // week name color
        calendar.appearance.headerDateFormat = "dd MMMM yyyy EEEE"
        calendar.appearance.headerTitleColor = UIColor.white
        calendar.appearance.headerTitleFont = UIFont.systemFont(ofSize: 12)
        calendar.appearance.titleWeekendColor = UIColor.white
        
        calendar.appearance.titleDefaultColor =  .white
        calendar.scrollDirection = .horizontal
        
        calendar.appearance.weekdayFont = UIFont.systemFont(ofSize: 12)
        calendar.appearance.titleFont = UIFont.systemFont(ofSize: 18)
        calendar.appearance.titleTodayColor = ("#54a767").toColor()
        calendar.appearance.selectionColor  = ("#788f9b").toColor()
        calendar.appearance.todayColor = nil
        
        calendar.appearance.subtitleWeekendColor = UIColor.white
        calendar.placeholderType = .none   /// to remove last month dates
        calendar.appearance.headerMinimumDissolvedAlpha = 0   // removes next prev month title.
        calendar.backgroundColor = .clear 
        
        calendar.firstWeekday = 2
        calendar.scope = .week
        
        ViewCalendar.addSubview(calendar)
    


    func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) 
        print(date)
        calendar.setCurrentPage(date, animated: true)
        calendar.select(date)
        
    

【问题讨论】:

【参考方案1】:

您可以通过替换所选日期的可见FSCalendarHeaderCells 的文本来做到这一点,如下所示

func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) 
    print(date)
    calendar.setCurrentPage(date, animated: true)
    calendar.select(date)
    
    //format the selectedDate and set to the header
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = calendar.appearance.headerDateFormat
    
    for cell in calendar.calendarHeaderView.collectionView.visibleCells 
        (cell as! FSCalendarHeaderCell).titleLabel.text = dateFormatter.string(from: date)
    

【讨论】:

完美。非常感谢。 很高兴为您提供帮助,您能否接受答案,因为它解决了问题。谢谢 再次打扰您,但我观察到,每当我们加载应用程序时,默认标题日期设置为16 September 2021 Thursday,就像今天它的15 September 2021 如果你想让 headerView 有今天的开头,使用一个新的 Date() 并在 setupFSCalendar() 的末尾运行 headerView 标题更改逻辑。 是的,我正在使用新的Date(),但没有HeaderView Title property

以上是关于使用选择日期快速更新 FSCalendar 标头值的主要内容,如果未能解决你的问题,请参考以下文章

FSCalendar select day 选择前一天 23:00

Swift FSCalendar 在表格视图的日历显示事件中选择日期

在 fscalendar 中禁用过去的日子

如何使用 FSCalendar 在有事件的圆圈中显示日期?

如何使用 FSCalendar 为日期显示 2 个不同颜色的点?

FSCalendar - 从选定的日期创建 segue 到另一个视图控制器