ios - CV日历: How to override CVCalendar properties that do not have explicit function API?

标签 ios swift

我正在使用 Swift 库 CVCalendar,并且我正在尝试自定义日历的外观。 我有一个名为“FirstViewController”的 ViewController,日历的 UIView 位于其中。在我的文件 FirstViewController.swift 中,我设法实现了属性自定义,其中 CVCalendar 提供了 API 函数。

但我不知道自定义其他没有这些函数API的属性的正确方法是什么。例如CVCalendar的类CVCalendarViewAppearanceDelegate有许多具有可以修改的默认值的属性,例如 dayLabelWeekdayInTextColor。

问题:如何正确修改 FirstViewController.swift 中的“dayLabelWeekdayInTextColor”等属性?

请注意,我创建了一个函数 setupCalendarFormat(),我在其中修改属性;我尝试在 viewDidLoad() 和 viewDidLayoutSubviews() 中调用它,但修改无法正常工作。

我的代码如下:

import UIKit
import CVCalendar

class FirstViewController: UIViewController {


    @IBOutlet weak var containerView: UIView!
    @IBOutlet weak var menuView: CVCalendarMenuView!
    @IBOutlet weak var calendarView: CVCalendarView!

 override func viewDidLoad() {
        super.viewDidLoad()
        //self.view.layoutIfNeeded()
        setupCalendarFormat()

    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        //setupCalendarFormat()
        menuView.commitMenuViewUpdate()
        calendarView.commitCalendarViewUpdate()
    }


    func setupCalendarFormat(){

    //CircleView background color and alpha
    calendarView.appearance.dayLabelPresentWeekdayHighlightedBackgroundColor = UIColor.black //not working highlight color not changing to black

    //day numbers' color
    calendarView.appearance.dayLabelWeekdayInTextColor = UIColor.green // not working correctly, color is only changing to green after i select the number
    calendarView.appearance.dayLabelPresentWeekdayTextColor = UIColor.green // working , probably becuase by default the present day is selected

    }


}


extension FirstViewController: CVCalendarViewDelegate, CVCalendarMenuViewDelegate{


    //All these APIs are succesfully called
    func presentationMode() -> CalendarMode {
        return .weekView
    }

    func firstWeekday() -> Weekday {
        return .sunday
    }

    func dayOfWeekFont() -> UIFont {
        return UIFont.systemFont(ofSize: 12.0, weight: .medium)
    }
    func dayOfWeekTextColor() -> UIColor { 
        return .black
    }

    func dayOfWeekTextUppercase() -> Bool {
        return false
    }

    func shouldShowWeekdaysOut() -> Bool { 
        return true
    }


}

最佳答案

CVCalendar 存储库为您提供了 CVCalendar 演示,演示如何设置日历元素的颜色。

它的工作原理基本上是这样的:

  1. 将 View Controller 设置为 CVCalendar 的委托(delegate)
  2. 使委托(delegate)符合委托(delegate)协议(protocol)
  3. 添加用于设置日历元素颜色的委托(delegate)方法

当日历即将显示文本元素时,它会通过调用特定方法向其委托(delegate)(您的 View Controller )询问颜色,该方法将根据您的逻辑返回 UIColor,例如:

extension ViewController: CVCalendarViewDelegate, CVCalendarMenuViewDelegate {

   func dayOfWeekTextColor(by weekday: Weekday) -> UIColor {
       return weekday == .sunday ? UIColor(red: 1.0, green: 0, blue: 0, alpha: 1.0) : UIColor.white
   }
}

请参阅demo implementation .

关于ios - CV日历: How to override CVCalendar properties that do not have explicit function API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50784851/

相关文章:

ios - UITableViewCells 在 tableview 首次加载时闪烁

arrays - 排序数组返回错误值

ios - 使用自动布局 Swift 定位 uibutton

ios - NSUserDefaults boolForKey

ios - Swift Array of Arrays 终止了 Xcode 索引,因此 type-ahead 不起作用

ios - 关于所选按钮的奇怪外观

ios - 在部署 iOS 应用程序的临时测试版本时遇到问题

iphone - 表格单元格图像背景未显示

ios - 在倒计时结束时重置或更改按钮标题

swift - 如何快速比较两种不同的日期格式