https://github.com/ruslanskorb/RSDayFlow
iOS 7+ Calendar (Date Picker) with Infinite Scrolling.
https://github.com/ruslanskorb/RSDayFlow
calendar date datepicker design infinite-scroll scroll scrollview
Last synced: 6 months ago
JSON representation
iOS 7+ Calendar (Date Picker) with Infinite Scrolling.
- Host: GitHub
- URL: https://github.com/ruslanskorb/RSDayFlow
- Owner: ruslanskorb
- License: mit
- Created: 2013-10-17T10:12:08.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2022-07-22T11:13:03.000Z (over 3 years ago)
- Last Synced: 2024-12-01T04:04:40.061Z (about 1 year ago)
- Topics: calendar, date, datepicker, design, infinite-scroll, scroll, scrollview
- Language: Objective-C
- Homepage:
- Size: 626 KB
- Stars: 842
- Watchers: 28
- Forks: 165
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ios - RSDayFlow - iOS 7+ Calendar with Infinite Scrolling. (UI / Calendar)
- awesome-ios-star - RSDayFlow - iOS 7+ Calendar with Infinite Scrolling. (UI / Calendar)
- awesome - RSDayFlow - iOS 7+ Calendar (Date Picker) with Infinite Scrolling. (scrollview)
- fucking-awesome-ios - RSDayFlow - iOS 7+ Calendar with Infinite Scrolling. (UI / Calendar)
README
# RSDayFlow   
iOS 12+ Calendar with Infinite Scrolling. Only need 4 lines of code to set up.
> [RSDayFlow](https://github.com/ruslanskorb/RSDayFlow) is a slim fork of [DayFlow](https://github.com/evadne/DayFlow) with updates and extensions:
* Visual feedback of the currently selected cell
* Possibility to mark the date
* Design like iOS 7
* Much more updates
## Installation
*RSDayFlow requires iOS 12.0 or later.*
### Using [Swift Package Manager](https://swift.org/package-manager/)
1. To add the `RSDayFlow` package to your Xcode project, select File > Swift Packages > Add Package Dependency and enter the repository URL.
https://github.com/ruslanskorb/RSDayFlow.git
### Using [CocoaPods](http://cocoapods.org)
1. Add the pod `RSDayFlow` to your [Podfile](http://guides.cocoapods.org/using/the-podfile.html).
pod 'RSDayFlow'
2. Run `pod install` from Terminal, then open your app's `.xcworkspace` file to launch Xcode.
### Using [Carthage](https://github.com/Carthage/Carthage)
1. Add the `ruslanskorb/RSDayFlow` project to your [Cartfile](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile).
github "ruslanskorb/RSDayFlow"
2. Run `carthage update`, then follow the [additional steps required](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application) to add the iOS and/or Mac frameworks into your project.
## Basic Usage
Import the class header.
``` objective-c
#import "RSDFDatePickerView.h"
```
Just create your date picker view and set a delegate / a data source if needed.
``` objective-c
- (void)viewDidLoad
{
[super viewDidLoad];
RSDFDatePickerView *datePickerView = [[RSDFDatePickerView alloc] initWithFrame:self.view.bounds];
datePickerView.delegate = self;
datePickerView.dataSource = self;
[self.view addSubview:datePickerView];
}
```
## Delegate (optional)
`RSDFDatePickerView` provides three delegate methods. The method `datePickerView:shouldHighlightDate:` asks the delegate if the date should be highlighted during tracking. The method `datePickerView:shouldSelectDate:` asks the delegate if the specified date should be selected. The method `datePickerView:didSelectDate:` called when a user click on a specific date. To use them, implement the delegate in your view controller.
```objective-c
@interface ViewController ()
```
Then implement the delegate functions.
```objective-c
// Returns YES if the date should be highlighted or NO if it should not.
- (BOOL)datePickerView:(RSDFDatePickerView *)view shouldHighlightDate:(NSDate *)date
{
return YES;
}
// Returns YES if the date should be selected or NO if it should not.
- (BOOL)datePickerView:(RSDFDatePickerView *)view shouldSelectDate:(NSDate *)date
{
return YES;
}
// Prints out the selected date.
- (void)datePickerView:(RSDFDatePickerView *)view didSelectDate:(NSDate *)date
{
NSLog(@"%@", [date description]);
}
```
## DataSource (optional)
`RSDFDatePickerView` provides three data source methods. The method `datePickerView:shouldMarkDate:` asks the data source if the date should be marked. The method `datePickerView:markImageColorForDate:` asks the data source about the color of the default mark image for the specified date. The method `datePickerView:markImageForDate:` asks the data source about the mark image for the specified date. The method `datePickerView:markImageColorForDate:` will be ignored if the method `datePickerView:markImageForDate:` is implemented. To use these methods, implement the data source in your view controller.
```objective-c
@interface ViewController ()
```
Then implement the data source functions.
```objective-c
// Returns YES if the date should be marked or NO if it should not.
- (BOOL)datePickerView:(RSDFDatePickerView *)view shouldMarkDate:(NSDate *)date
{
// The date is an `NSDate` object without time components.
// So, we need to use dates without time components.
NSCalendar *calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *todayComponents = [calendar components:unitFlags fromDate:[NSDate date]];
NSDate *today = [calendar dateFromComponents:todayComponents];
return [date isEqual:today];
}
// Returns the color of the default mark image for the specified date.
- (UIColor *)datePickerView:(RSDFDatePickerView *)view markImageColorForDate:(NSDate *)date
{
if (arc4random() % 2 == 0) {
return [UIColor grayColor];
} else {
return [UIColor greenColor];
}
}
// Returns the mark image for the specified date.
- (UIImage *)datePickerView:(RSDFDatePickerView *)view markImageForDate:(NSDate *)date
{
if (arc4random() % 2 == 0) {
return [UIImage imageNamed:@"img_gray_mark"];
} else {
return [UIImage imageNamed:@"img_green_mark"];
}
}
```
## Customization
Every view is customizable to fit your need.
Create a subclass of the desired view and override the default values.
## Coming Soon
- If you would like to request a new feature, feel free to raise as an issue.
## Demo
Build and run the `RSDayFlowExample` project in Xcode to see `RSDayFlow` in action.
Have fun. Make it faster. Fork and send pull requests. Figure out hooks for customization.
## Contact
Ruslan Skorb
- http://github.com/ruslanskorb
- ruslan.skorb@gmail.com
## License
This project is is available under the MIT license. See the LICENSE file for more info. Attribution by linking to the [project page](https://github.com/ruslanskorb/RSDayFlow) is appreciated.