首页 > 解决方案 > JTAppleCalendar 以编程方式,单元格未显示

问题描述

我正在尝试在没有情节提要的情况下以编程方式实现 JTAppleCalendar,使用单元格的 xib 文件。我已经设置了委托和数据源,并实现了所需的功能,但单元格没有显示。我可以看到集合视图已设置并且在 Viewcontroller 中可见(链接 2 中图像中的蓝色方块),并且调用了 configureCalendar() 和 cellForItemAt(),但仍然没有显示数据。

我错过了什么?

    var calendarView: JTAppleCalendarView!

  override func viewDidLoad() {
    super.viewDidLoad()

    calendarView = JTAppleCalendarView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
    calendarView.register(CalendarCellView.self, forCellWithReuseIdentifier: "cell")
    calendarView.ibCalendarDelegate = self
    calendarView.ibCalendarDataSource = self
    self.view.addSubview(calendarView)
    self.view.bringSubview(toFront: calendarView)
    self.calendarView.backgroundColor = UIColor.blue
}

extension TestViewController: JTAppleCalendarViewDataSource {
   func configureCalendar(_ calendar: JTAppleCalendarView) -> ConfigurationParameters {
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy MM dd"

    let startDate = formatter.date(from: "2016 02 01")! // You can use date generated from a formatter
    let endDate = Date()                                // You can also use dates created from this function
    let parameters = ConfigurationParameters(startDate: startDate,
                                             endDate: endDate,
                                             numberOfRows: 6, // Only 1, 2, 3, & 6 are allowed
        calendar: Calendar.current,
        generateInDates: .forAllMonths,
        generateOutDates: .tillEndOfGrid,
        firstDayOfWeek: .sunday)
    return parameters
}

func calendar(_ calendar: JTAppleCalendarView, willDisplay cell: JTAppleCell, forItemAt date: Date, cellState: CellState, indexPath: IndexPath) {

    }
}

extension TestViewController: JTAppleCalendarViewDelegate {
  func calendar(_ calendar: JTAppleCalendarView, cellForItemAt date: Date, cellState: CellState, indexPath: IndexPath) -> JTAppleCell {

    let cell = calendar.dequeueReusableJTAppleCell(withReuseIdentifier: "cell", for: indexPath) as! CalendarCellView
    cell.dayLabel?.text = cellState.text
    print(cellState.text)

    return cell
  }  
}



class CalendarCellView: JTAppleCell {

@IBOutlet var dayLabel: UILabel!
@IBOutlet var taskImage: UIImageView!

override func awakeFromNib() {
    dayLabel.textColor = UIColor.red
    self.backgroundColor = UIColor.blue
  }   
}

xib 单元格的屏幕截图

集合视图当前外观的屏幕截图

标签: iosswiftuicollectionviewjtapplecalendar

解决方案


布局

JTAppleCalendarView的超类是UICollectionView,它用于UICollectionViewFlowLayout布局项目。JTAppleCalendarView提供CellSize配置项目大小,您也可以使用UICollectionViewFlowLayout配置Min Spacing.

使用自定义单元格

我猜你是用xib来自定义单元格的,所以你必须使用register(_ nib: UINib?, forCellWithReuseIdentifier identifier: String)注册单元格。最后,不要忘记为dayLabel添加约束。

例子

calendarView 的单元格大小为 40,宽度为 280(7 列),高度为 240(六行),单元格和行的最小间距为 0。在此处输入图像描述


推荐阅读