swift - 切换到另一个calendarView时如何创建新的collectionView
问题描述
我在尝试创建新的集合视图时遇到问题。我想有效地拥有一个具有独特属性的 collectionView,然后当我在我的视图控制器中单击一个日期时,它会变为一个有效的空白 collectionView 模板,以便用户可以将它放在那里食谱。
我将如何更改 collectionView(当用户单击日期时),更改为 collection-view 模板,然后在用户输入数据时保存?
这是控制器的代码以及图片示例:
import UIKit
import GCCalendar
class CalendarViewController123: UIViewController, UICollectionViewDelegate {
// MARK: Properties
fileprivate var calendarView: GCCalendarView!
@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet weak var datelabel: UILabel!
@IBOutlet weak var open: UIBarButtonItem!
@IBAction func trytoday(_ sender: Any) {
self.calendarView.select(date: Date())
}
}
// MARK: - View
extension CalendarViewController123 {
override func viewDidLoad() {
super.viewDidLoad()
open.target = revealViewController()
open.action = #selector(SWRevealViewController.revealToggle(_:))
self.addToolbar()
self.addCalendarView()
self.addConstraints()
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for:.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
}
}
// MARK: - Toolbar
extension CalendarViewController123 {
fileprivate func addToolbar() {
self.navigationController!.isToolbarHidden = false
let space = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let displayMode = UIBarButtonItem(title: "Display Mode", style: .plain, target: self, action: #selector(self.displayMode))
self.toolbarItems = [ space, displayMode]
}
@objc func displayMode() {
self.calendarView.displayMode = (self.calendarView.displayMode == .month) ? .week : .month
}
}
// MARK: - Calendar View
fileprivate extension CalendarViewController123 {
func addCalendarView() {
self.calendarView = GCCalendarView()
self.calendarView.delegate = self
self.calendarView.displayMode = .week
self.calendarView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(self.calendarView)
}
}
// MARK: - Constraints
fileprivate extension CalendarViewController123 {
func addConstraints() {
self.calendarView.topAnchor.constraint(equalTo: self.topLayoutGuide.bottomAnchor, constant: 2).isActive = true
self.calendarView.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true
self.calendarView.rightAnchor.constraint(equalTo: self.view.rightAnchor).isActive = true
self.calendarView.heightAnchor.constraint(equalToConstant: 325).isActive = true
}
}
// MARK: - GCCalendarViewDelegate
extension CalendarViewController123: GCCalendarViewDelegate {
func calendarView(_ calendarView: GCCalendarView, didSelectDate date: Date, inCalendar calendar: Calendar) {
let dateFormatter = DateFormatter()
dateFormatter.calendar = calendar
dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "MMM dd", options: 0, locale: calendar.locale)
//yyyy
// self.navigationItem.title = dateFormatter.string(from: date)
self.datelabel.text = dateFormatter.string(from: date)
}
}
绿色是视图控制器上的 collectionView
解决方案
这取决于您显示的数据以及检索数据的方式。如果您可以提供更多信息,我将相应地更新我的答案。
1. 选择日期
@IBAction func trytoday(_ sender: Any) {
self.calendarView.select(date: Date())
self.fetchData(forDate: selectedDate)
}
2. 获取数据
func fetchData(forDate date: Date) {
//Fetch data and return array of objects
self.objects = retreivedObjects
self.collectionView.reloadData()
}
3.加载数据
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return objects.count
}
4. 使用数据设置单元格
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as? Cell else { return UICollectionViewCell}
cell.configure(withObject: objects[indexPath.item])
return cell
}
推荐阅读
- javascript - 使用拼接方法时如何保留先前的数组
- apache-spark - 无法针对 hadoop 3.2.0 构建 spark2.4.3
- r - 重新整理眼动追踪数据
- python - 如何使用 Python 将写为“h.mm”的时间转换为十进制形式?
- c++ - 使用可变参数模板和运行时索引构造 iterator_range
- php - Google Ads API 未发送正确的关键字估算值
- arrays - 如何根据唯一 ID Nr 将工作表 1 中的值添加到同一 Excel 文件中的另一个工作表?
- python - 为什么我的代码每隔一秒打印一次 cidr 范围?
- reactjs - 尝试从上下文消费者修改状态,但状态仅受我模板中最后一个消费者的影响
- angular-material - DateTimePicker 不适用于角度材料