如何在 iOS 中显示 2 个日历以及如何禁用两者的未来日期 [英] How to show 2 calenders and how to disable future dates for both too in iOS
问题描述
我正在为我的 swift 项目做日历视图.我必须将 From Date 和 To Fate 传递给服务器.所以,根据我们的设计,我必须在 UI 中显示 2 个日历.因此,我在 UI 中设计了 2 个日历,并使用以下库来实现它.
此外,我不知道如何为下一个和上一个按钮操作提供操作,因为我在该库中找不到它们.
我还必须更改当前日期的颜色.
实现这些目标的任何建议.
这是代码
Viewcontroller.swift////视图控制器.swift//小约米////由 shoheiyokoyama 于 2016 年 10 月 9 日创建.//版权所有 (c) 2016 shoheiyokoyama.版权所有.//导入 UIKit进口 Koyomi类视图控制器:UIViewController {@IBOutlet fileprivate 弱变量 startDateCalenderSelectedDateLabel: UILabel!@IBOutlet fileprivate 弱变量 ednDateCalenderSelectedDateLabel: UILabel!@IBOutlet fileprivate 弱变量 startDateCalender:Koyomi!{已设置{startDateCalender.circularViewDiameter = 0.2startDateCalender.calendarDelegate = selfstartDateCalender.inset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)startDateCalender.weeks = (Sun"、Mon"、Tue"、Wed"、Thu"、Fri"、Sat")startDateCalender.style = .standardstartDateCalender.dayPosition = .centerstartDateCalender.selectionMode = .single(style: .background)startDateCalender.selectedStyleColor = UIColor.systemBluestartDateCalender.isHiddenOtherMonth = truestartDateCalender.select(date: Date())开始日期日历.setDayFont(大小:14).setWeekFont(大小:10)}}@IBOutlet fileprivate 弱变量 endDateCalender:Koyomi!{已设置{endDateCalender.circularViewDiameter = 0.2endDateCalender.calendarDelegate = selfendDateCalender.inset = UIEdgeInsets(顶部:0,左侧:0,底部:0,右侧:0)endDateCalender.weeks = (Sun"、Mon"、Tue"、Wed"、Thu"、Fri"、Sat")endDateCalender.style = .standardendDateCalender.dayPosition = .centerendDateCalender.selectionMode = .single(style: .background)endDateCalender.selectedStyleColor = UIColor.systemBlueendDateCalender.isHiddenOtherMonth = true结束日期日历.setDayFont(大小:14).setWeekFont(大小:10)}}fileprivate 让 invalidPeriodLength = 90覆盖 func viewDidLoad() {super.viewDidLoad()//currentDateLabel.text = startDateCalender.currentDateString()}@IBAction func startDateNextButtonTap(_button: Any) {}@IBAction func startDatePreviousButtonTap(_button: Any) {}@IBAction func endDateNextButtonTap(_button: Any) {}@IBAction func endDatePreviousButtonTap(_button: Any) {}//标记: - 实用程序 -fileprivate func date(_ date: Date, later: Int) ->日期 {var 组件 = DateComponents()components.day = 稍后return (Calendar.current as NSCalendar).date(byAdding: components, to: date, options: NSCalendar.Options(rawValue: 0)) ??日期}}//MARK: - 点击动作扩展视图控制器{@IBAction func tappedControl(_ sender: UISegmentedControl) {让月份:MonthType = {切换 sender.selectedSegmentIndex {情况 0:返回 .previous情况 1:返回 .current默认值:返回 .next}}()startDateCalender.display(in: 月份)}//改变 koyomi 风格//公用事业func configureStyle(_ style: KoyomiStyle) {startDateCalender.style = 样式startDateCalender.reloadData()}}//MARK: - KoyomiDelegate -扩展视图控制器:KoyomiDelegate {func koyomi(_ koyomi: Koyomi, didSelect date: Date?, forItemAt indexPath: IndexPath) {如果 koyomi == startDateCalender {打印(开始日期日历选择:\(日期)")startDateCalenderSelectedDateLabel.text = "\(date!)";} else if koyomi == endDateCalender {ednDateCalenderSelectedDateLabel.text = "\(date!)";}}func koyomi(_ koyomi: Koyomi, currentDateString dateString: String) {如果 koyomi == startDateCalender {startDateCalenderSelectedDateLabel.text = dateString} else if koyomi == endDateCalender {ednDateCalenderSelectedDateLabel.text = dateString}}@objc(koyomi:shouldSelectDates:to:withPeriodLength:)func koyomi(_ koyomi: Koyomi, shouldSelectDates date: Date?, to toDate: Date?, withPeriodLength length: Int) ->布尔{如果长度 >invalidPeriodLength {print(超过 \(invalidPeriodLength) 天是无效期.")返回假}返回真}}
https://cocoapods.org/pods/JTAppleCalendar尝试使用此 Pod.
Pod Koyomi 看起来很旧,无法使用 Xcode 12 进行构建.
I am doing calendar view for my swift project. I have to pass From Date and To Fate to server. So, As per our design I have to show 2 calendars in UI. So, I design 2 calendars in UI and I am using following library to achieve it.
https://github.com/shoheiyokoyama/Koyomi
But, I have to disable future dates and user should not select them. Also It should not navigates to future months too.
Also I am not getting how to give actions to next and previous buttons action, Since I could not found them in that library.
Also I have to change colour for current date.
Any suggestions to achieve these.
Here is code
Viewcontroller.swift
//
// ViewController.swift
// Koyomi
//
// Created by shoheiyokoyama on 10/09/2016.
// Copyright (c) 2016 shoheiyokoyama. All rights reserved.
//
import UIKit
import Koyomi
class ViewController: UIViewController {
@IBOutlet fileprivate weak var startDateCalenderSelectedDateLabel: UILabel!
@IBOutlet fileprivate weak var ednDateCalenderSelectedDateLabel: UILabel!
@IBOutlet fileprivate weak var startDateCalender: Koyomi! {
didSet {
startDateCalender.circularViewDiameter = 0.2
startDateCalender.calendarDelegate = self
startDateCalender.inset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
startDateCalender.weeks = ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")
startDateCalender.style = .standard
startDateCalender.dayPosition = .center
startDateCalender.selectionMode = .single(style: .background)
startDateCalender.selectedStyleColor = UIColor.systemBlue
startDateCalender.isHiddenOtherMonth = true
startDateCalender.select(date: Date())
startDateCalender
.setDayFont(size: 14)
.setWeekFont(size: 10)
}
}
@IBOutlet fileprivate weak var endDateCalender: Koyomi! {
didSet {
endDateCalender.circularViewDiameter = 0.2
endDateCalender.calendarDelegate = self
endDateCalender.inset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
endDateCalender.weeks = ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")
endDateCalender.style = .standard
endDateCalender.dayPosition = .center
endDateCalender.selectionMode = .single(style: .background)
endDateCalender.selectedStyleColor = UIColor.systemBlue
endDateCalender.isHiddenOtherMonth = true
endDateCalender
.setDayFont(size: 14)
.setWeekFont(size: 10)
}
}
fileprivate let invalidPeriodLength = 90
override func viewDidLoad() {
super.viewDidLoad()
// currentDateLabel.text = startDateCalender.currentDateString()
}
@IBAction func startDateNextButtonTap(_button: Any) {
}
@IBAction func startDatePreviousButtonTap(_button: Any) {
}
@IBAction func endDateNextButtonTap(_button: Any) {
}
@IBAction func endDatePreviousButtonTap(_button: Any) {
}
// MARK: - Utility -
fileprivate func date(_ date: Date, later: Int) -> Date {
var components = DateComponents()
components.day = later
return (Calendar.current as NSCalendar).date(byAdding: components, to: date, options: NSCalendar.Options(rawValue: 0)) ?? date
}
}
// MARK: - Tap Action
extension ViewController {
@IBAction func tappedControl(_ sender: UISegmentedControl) {
let month: MonthType = {
switch sender.selectedSegmentIndex {
case 0: return .previous
case 1: return .current
default: return .next
}
}()
startDateCalender.display(in: month)
}
// Change koyomi style
// Utility
func configureStyle(_ style: KoyomiStyle) {
startDateCalender.style = style
startDateCalender.reloadData()
}
}
// MARK: - KoyomiDelegate -
extension ViewController: KoyomiDelegate {
func koyomi(_ koyomi: Koyomi, didSelect date: Date?, forItemAt indexPath: IndexPath) {
if koyomi == startDateCalender {
print("startDateCalender Selected: \(date)")
startDateCalenderSelectedDateLabel.text = "\(date!)"
} else if koyomi == endDateCalender {
ednDateCalenderSelectedDateLabel.text = "\(date!)"
}
}
func koyomi(_ koyomi: Koyomi, currentDateString dateString: String) {
if koyomi == startDateCalender {
startDateCalenderSelectedDateLabel.text = dateString
} else if koyomi == endDateCalender {
ednDateCalenderSelectedDateLabel.text = dateString
}
}
@objc(koyomi:shouldSelectDates:to:withPeriodLength:)
func koyomi(_ koyomi: Koyomi, shouldSelectDates date: Date?, to toDate: Date?, withPeriodLength length: Int) -> Bool {
if length > invalidPeriodLength {
print("More than \(invalidPeriodLength) days are invalid period.")
return false
}
return true
}
}
How can I make calendar view in Swift
https://cocoapods.org/pods/JTAppleCalendar Try using this pod.
Looks like Pod Koyomi is old and not able to build using Xcode 12.
这篇关于如何在 iOS 中显示 2 个日历以及如何禁用两者的未来日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!