Open suraj-ios opened 6 years ago
First of all, I'm too lazy to make commit sorry. ¯_(ツ)_/¯
In case someone will search for the solution, here it is:
Add these to extension CalendarDateRangePickerViewController:
func isCellBlank(at indexPath: IndexPath) -> Bool {
let blankItems = getWeekday(date: getFirstDateForSection(section: indexPath.section)) - 1
if indexPath.item >= 7 && indexPath.item < 7 + blankItems {
return true
}
return false
}
func isWeekDayLabel(at indexPath: IndexPath) -> Bool {
if indexPath.item < 7{
return true
}
return false
}
func isDayItem(at indexPath: IndexPath) -> Bool {
if !isCellBlank(at: indexPath) && !isWeekDayLabel(at: indexPath){
return true
}
return false
}
func isDaySelected(at indexPath: IndexPath) -> Bool {
let blankItems = getWeekday(date: getFirstDateForSection(section: indexPath.section)) - 1
let dayOfMonth = indexPath.item - (7 + blankItems) + 1
let date = getDate(dayOfMonth: dayOfMonth, section: indexPath.section)
if selectedStartDate != nil && selectedEndDate != nil && isBefore(dateA: selectedStartDate!, dateB: date) && isBefore(dateA: date, dateB: selectedEndDate!) {
return true
} else if selectedStartDate != nil && areSameDay(dateA: date, dateB: selectedStartDate!) {
return true
} else if selectedEndDate != nil && areSameDay(dateA: date, dateB: selectedEndDate!) {
return true
}
return false
}
Change following methods in same extension to:
override public func numberOfSections(in collectionView: UICollectionView) -> Int {
return numberOfSections()
}
public func numberOfSections() -> Int {
let difference = Calendar.current.dateComponents([.month], from: minimumDate, to: maximumDate)
if difference.month! == 0 && Calendar.current.dateComponents([.month], from: minimumDate).month != Calendar.current.dateComponents([.month], from: maximumDate).month {
return 2
}
return difference.month! + 1
}
override public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return numberOfItemsInSection(section: section)
}
public func numberOfItemsInSection(section: Int) -> Int {
let firstDateForSection = getFirstDateForSection(section: section)
let weekdayRowItems = 7
let blankItems = getWeekday(date: firstDateForSection) - 1
let daysInMonth = getNumberOfDaysInMonth(date: firstDateForSection)
return weekdayRowItems + blankItems + daysInMonth
}
Add these to extension CalendarDateRangePickerViewController:
public func scrollToSelection(){
let sections = numberOfSections()
for section in 0..<sections {
let items = numberOfItemsInSection(section: section)
for item in 0..<items {
let indexPath = IndexPath(item: item, section: section)
if isDayItem(at: indexPath) && isDaySelected(at: indexPath) {
collectionView.scrollToItem(at: indexPath, at: UICollectionView.ScrollPosition.centeredVertically, animated: false)
return
}
}
}
}
Add these to class CalendarDateRangePickerViewController
public var showSelectionOnStart = false
override public func viewWillAppear(_ animated: Bool) {
if showSelectionOnStart {
scrollToSelection()
}
}
Successfully implemented with the help of above code... but if we set minimum date = -100 years and maximum date as +100 years from now, then it is taking around 2-3 seconds to set the date.
When you open the calendar then show current date.
Ex:- Minimum date -1/1/2016, then it start from 1/1/2016 BUT i want to show my current date like today BUT minimum date is same as 1/1/2016 as it is.
How can i do that.
Thanks in advance.