- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在我的项目中添加了 JTAppleCalendar
,我想在我的一些日历单元格中添加一些标签。我成功添加了它们,但是当我在我的日历月份向左或向右滚动时,标签内的单元格消失、隐藏或混合,当我一次又一次滚动时,混合越来越多。我需要任何协议(protocol)或代表等吗?或者,这只是一个错误?
How can I fix that bug?
我的 cellForItemAt
代码:
func calendar(_ calendar: JTAppleCalendarView, cellForItemAt date: Date, cellState: CellState, indexPath: IndexPath) -> JTAppleCell {
let cell = calendar.dequeueReusableCell(withReuseIdentifier: "CellView", for: indexPath) as! CellView
var currentdate = String(describing: myCalendar.date(byAdding: .day, value: 1, to: cellState.date))
currentdate = currentdate.substring(from: 9, length: 10)
cell.tagList.tags.removeAll()
cell.tagList.hide()
cell.contentView.backgroundColor = nil
cell.tagList.alpha = 0
cell.tagList.numberOfRows = 0
cell.tagList.backgroundColor = UIColor.clear
cell.tagList.isHidden = true
var i : Int
i = 0
for object in datas {
i = i + 1
let clean = "\(object)".components(separatedBy: "*")
if clean[0] == currentdate {
let gotag : Int
gotag = Int(clean[1])!
cell.tagList.isHidden = false
cell.dayLabel.text = cellState.text
cell.contentView.backgroundColor = UIColor.gray
let itemName = "Item name \(i)"
cell.tagList.alpha = 1
if clean[1] == "1" {
cell.tagList.addTag(itemName, target: self, tapAction: #selector(ViewController.tap(_:)), longPressAction: #selector(ViewController.tap(_:)),backgroundColor: UIColor.orange,textColor: UIColor.white,comesTag: gotag)
}else if clean[1] == "2" {
cell.tagList.addTag(itemName, target: self, tapAction: #selector(ViewController.tap(_:)), longPressAction: #selector(ViewController.tap(_:)),backgroundColor: UIColor.green,textColor: UIColor.white,comesTag: gotag)
}else if clean[1] == "3" {
cell.tagList.addTag(itemName, target: self, tapAction: #selector(ViewController.tap(_:)), longPressAction: #selector(ViewController.tap(_:)),backgroundColor: UIColor.brown,textColor: UIColor.white,comesTag: gotag)
}else if clean[1] == "4" {
cell.tagList.addTag(itemName, target: self, tapAction: #selector(ViewController.tap(_:)), longPressAction: #selector(ViewController.tap(_:)),backgroundColor: UIColor.black,textColor: UIColor.white,comesTag: gotag)
}
}else{
cell.tagList.backgroundColor = UIColor.clear
}
}
handleCellConfiguration(cell: cell, cellState: cellState)
return cell
}
行动中的错误:
https://github.com/LetSwiftDev/CalendarBug/blob/master/calendarbug.gif
您也可以在这里加入官方 JTAppleCalendar 聊天</strong> https://gitter.im/patchthecode/JTAppleCalendar
最佳答案
基本上,要做出奇怪的“解决方法”,您应该实现经典的UICollectionView(JTAppleCalendar 来自它)willDisplay
method ,正如您所见,理论上它应该用于检测单元格添加而不是复制它的内容,因此要重新构建内容,您可以按照同样向 JTAppleCalendar 解释的示例进行操作gitHub issues和 由 swift nub 报告 here在此页面中。
因此,您的代码可能是:
extension ViewController: JTAppleCalendarViewDelegate, JTAppleCalendarViewDataSource {
func calendar(_ calendar: JTAppleCalendarView, willDisplay cell: JTAppleCell, forItemAt date: Date, cellState: CellState, indexPath: IndexPath) {
var cell = cell as! CellView
cell = sharedFunctionToConfigureCell(cell: cell, cellState: cellState, date: date)
}
func calendar(_ calendar: JTAppleCalendarView, cellForItemAt date: Date, cellState: CellState, indexPath: IndexPath) -> JTAppleCell {
var cell = calendar.dequeueReusableCell(withReuseIdentifier: "CellView", for: indexPath) as! CellView
cell = sharedFunctionToConfigureCell(cell: cell, cellState: cellState, date: date)
return cell
}
func sharedFunctionToConfigureCell(cell: CellView, cellState: CellState, date: Date)-> CellView {
var currentdate = String(describing: myCalendar.date(byAdding: .day, value: 1, to: cellState.date))
currentdate = currentdate.substring(from: 9, length: 10)
cell.tagList.tags.removeAll()
cell.tagList.hide()
cell.contentView.backgroundColor = nil
cell.tagList.alpha = 0
cell.tagList.numberOfRows = 0
cell.tagList.backgroundColor = UIColor.clear
cell.tagList.isHidden = true
var i : Int
i = 0
for object in datas {
i = i + 1
let clean = "\(object)".components(separatedBy: "*")
if clean[0] == currentdate {
let gotag : Int
gotag = Int(clean[1])!
cell.tagList.isHidden = false
cell.dayLabel.text = cellState.text
cell.contentView.backgroundColor = UIColor.gray
let itemName = "Item name \(i)"
cell.tagList.alpha = 1
if clean[1] == "1" {
cell.tagList.addTag(itemName, target: self, tapAction: #selector(ViewController.tap(_:)), longPressAction: #selector(ViewController.tap(_:)),backgroundColor: UIColor.orange,textColor: UIColor.white,comesTag: gotag)
}else if clean[1] == "2" {
cell.tagList.addTag(itemName, target: self, tapAction: #selector(ViewController.tap(_:)), longPressAction: #selector(ViewController.tap(_:)),backgroundColor: UIColor.green,textColor: UIColor.white,comesTag: gotag)
}else if clean[1] == "3" {
cell.tagList.addTag(itemName, target: self, tapAction: #selector(ViewController.tap(_:)), longPressAction: #selector(ViewController.tap(_:)),backgroundColor: UIColor.brown,textColor: UIColor.white,comesTag: gotag)
}else if clean[1] == "4" {
cell.tagList.addTag(itemName, target: self, tapAction: #selector(ViewController.tap(_:)), longPressAction: #selector(ViewController.tap(_:)),backgroundColor: UIColor.black,textColor: UIColor.white,comesTag: gotag)
}
}else{
cell.tagList.backgroundColor = UIColor.clear
}
}
handleCellConfiguration(cell: cell, cellState: cellState)
return cell
}
// your other code..
根据您的意见,我决定深入分析您的代码。
首先,您的 mainStoryBoard 中有一个小错误,您可以很容易地纠正它,用 UIButton
替换 DesignableButton
(不存在的类),如图所示以避免错误:CalendarBug[9879:1645088] Interface Builder 文件中的未知类 _TtC11CalendarBug16DesignableButton
。
之后,完整的 JTAppleCaledar
库似乎没有任何问题,事实上作者还扩展了 willDisplay
委托(delegate),解决了单元格渲染的许多问题。
我在 TagListView.swift
类中发现了您的问题,更准确地说是在方法 reset
中。
func reset() {
for tag in tags {
tag.removeFromSuperview()
}
tags = []
currentRow = 0
numberOfRows = 0
}
此方法从 superview 中删除所有标签列表(标签数组),但不删除过去添加到 superview 的其他标签,换句话说,仅包含数组 tags
中的标签。因此,为避免此问题,您可以通过在线添加来加强您的 reset
方法(我们知道它们是 UILabel
所以不需要知道它们的所有 tag
编号):
func reset() {
for tag in tags {
tag.removeFromSuperview()
}
tags = []
currentRow = 0
numberOfRows = 0
self.subviews.forEach({ if $0 is UILabel { $0.removeFromSuperview()} })
}
要优化您的代码,您只需将此方法更正为:
func reset(){
tags = []
currentRow = 0
numberOfRows = 0
self.subviews.forEach({ if $0 is UILabel { $0.removeFromSuperview()} })
}
输出:
关于swift - Swift 3.2 中 cellForItemAt 日期的 JTAppleCalendar 自定义单元错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47485263/
我在 cellForItemAt 方法中针对特定条件绘制一个圆圈,如下所示: if cellState.date == CalendarModel.DUE_DATE { let
我正在尝试以编程方式实现 JTAppleCalendar,无需 Storyboard,使用单元格的 xib 文件。我已经设置了委托(delegate)和数据源,并实现了所需的功能,但单元格没有显示。我
我有一个包含预订的对象数组 class MonthBookings: NSObject { var date: Date = Date() var bookings_count:
我的应用程序上有一个使用 JTAppleCalendar 7.0 的日历。 但是,同样的代表没有工作。请引用我的需求截图。 请有人与我分享示例委托(delegate)函数。 下面是日历中各门店的截图。
func calendar(_ calendar: JTAppleCalendarView, headerViewForDateRange range: (start: Date, end: Date
您好,我正在尝试显示 JTAppleCalendar 选择的当前日期,但我希望它不要触发 isSelected,因为我想在用户实际选择日期时显示时间选择器,而不是在加载日历时触发与当前日期 选中单元格
我正在使用以下函数尝试在您滚动日历时为每个标题打印出月份。我做 for 循环的方式肯定有问题,因为我离开的唯一月份是 12 月。有任何想法吗?谢谢 使用 print("(names)"),我在控制台上
现在我使用的是 JTAppleCalendar 6.0 版本, func configureCalendar(_ calendar: JTAppleCalendarView) -> Configura
我在我的 iOS 应用程序中使用 JTAppleCalendar,但我发现很难像传统日历那样实现在日历顶部显示月份和年份的 header 。我已按照文档中的说明进行操作,但尽管我觉得可能不正确,但我仍
import UIKit import JTAppleCalendar class ViewController: UIViewController, JTAppleCalendarViewDeleg
我想显示从特定日期开始的日历。 请参阅以下示例。(开始日期 = 15,结束日期 = 14) 一月:1.15~2.14 2月:2.15~3.14 3月:3.15~4.14 ... 我在互联网上搜索过,但
我在我的项目中使用 JTAppleCalendar 你可以在这里看到它 -> https://github.com/patchthecode/JTAppleCalendar .但是,当我想更改某些单元
我正在使用 JTAppleCalendar,每个月的日期都比应该的日期提前 1 天。这是我的配置代码: func configureCalendar(_ calendar: JTAppleCalend
我想创建自定义日历,所以我为此使用了 JTAppleCalendar 我采用了一个 Collection View 并想在 Collection View 单元格中显示日期,但它没有显示应该如何解决这
我有一个包含 2 个 Collection View 的 View Controller 。因此,第一个日历的数据源和委托(delegate)位于 View Controller 扩展中。第二,我试图
我在我的项目中添加了 JTAppleCalendar,我想在我的一些日历单元格中添加一些标签。我成功添加了它们,但是当我在我的日历月份向左或向右滚动时,标签内的单元格消失、隐藏或混合,当我一次又一次滚
我正在使用这个库: https://github.com/orazz/CalendarPopUp 假设我有一个用户注册日期,它是 2017 年 9 月 28 日。现在我只想启用下一个日期、月份和年份之
我是一名优秀的程序员,十分优秀!