10 KiB
Updates
- NSCalendarExtension is required to get iOS7 compatibility.
Table of contents
Screenshots
Working with AutoLayout and Orientation
Hide placeholder dates
FSCalendar doesn't change frame or the constraint by itself, see Adjusts frame dynamicly
Today Extension (iOS8/9)
Today Extension With NCWidgetDisplayMode (iOS10)
DIY support
![]() |
|---|
Installation
CocoaPods:
- For iOS8+: 👍
use_frameworks!
pod 'FSCalendar'
- For iOS7+:
pod 'FSCalendar'
NSCalendarExtension is required to get iOS7 compatibility.
- Alternatively to give it a test run, run the command:
pod try FSCalendar
Carthage:
- For iOS8+
github "WenchaoD/FSCalendar"
Manually:
- Drag all files under
FSCalendarfolder into your project. 👍
Support IBInspectable / IBDesignable
Only the methods marked "👍" support IBInspectable / IBDesignable feature. Have fun with Interface builder
Setup
Use Interface Builder
- Drag an UIView object to ViewController Scene
- Change the
Custom ClasstoFSCalendar - Link
dataSourceanddelegateto the ViewController
- Finally, you should implement
FSCalendarDataSourceandFSCalendarDelegatein ViewController.m
Or use code
@property (weak , nonatomic) FSCalendar *calendar;
// In loadView(Recommended) or viewDidLoad
FSCalendar *calendar = [[FSCalendar alloc] initWithFrame:CGRectMake(0, 0, 320, 300)];
calendar.dataSource = self;
calendar.delegate = self;
[self.view addSubview:calendar];
self.calendar = calendar;
Or swift
- To use
FSCalendarin swift, you need to Create Bridge Header first.
private weak var calendar: FSCalendar!
// In loadView or viewDidLoad
let calendar = FSCalendar(frame: CGRect(x: 0, y: 0, width: 320, height: 300))
calendar.dataSource = self
calendar.delegate = self
view.addSubview(calendar)
self.calendar = calendar
To use FSCalendar in Swift3, see
Example-Swiftfor details.
Warning
FSCalendar doesn't change frame by itself, Please implement
- For autoLayout
- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated
{
_calendarHeightConstraint.constant = CGRectGetHeight(bounds);
[self.view layoutIfNeeded];
}
- For manual layout
- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated
{
calendar.frame = (CGRect){calendar.frame.origin,bounds.size};
}
Roll with Interface Builder
Pre-knowledge
In
Swift3,NSDateandNSDateFormatterhave been renamed to Date and DateFormatter , seeSwiftExamplefor details.
How to create NSDate object
- By NSCalendar.
self.gregorian = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
Then:
NSDate *date = [gregorian dateWithEra:1 year:2016 month:9 day:10 hour:0 minute:0 second:0 nanosecond:0];
// 2016-09-10 00:00:00
- Or by NSDateFormatter
self.formatter = [[NSDateFormatter alloc] init];
self.formatter.dateFormat = @"yyyy-MM-dd";
Then:
NSDate *date = [self.formatter dateFromString:@"2016-09-10"];
How to print out NSDate object
- Use NSDateFormatter
self.formatter = [[NSDateFormatter alloc] init];
self.formatter.dateFormat = @"yyyy/MM/dd";
NSString *string = [self.formatter stringFromDate:date];
NSLog(@"Date is %@", string);
How to manipulate NSDate with NSCalendar
self.gregorian = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
- Get component of NSDate
NSInteger era = [self.gregorian component:NSCalendarUnitEra fromDate:date];
NSInteger year = [self.gregorian component:NSCalendarUnitYear fromDate:date];
NSInteger month = [self.gregorian component:NSCalendarUnitMonth fromDate:date];
NSInteger day = [self.gregorian component:NSCalendarUnitDay fromDate:date];
NSInteger hour = [self.gregorian component:NSCalendarUnitHour fromDate:date];
NSInteger minute = [self.gregorian component:NSCalendarUnitMinute fromDate:date];
...
- Get next month
NSDate *nextMonth = [self.gregorain dateByAddingUnit:NSCalendarUnitMonth value:1 toDate:date options:0];
- Get next day
NSDate *nextDay = [self.gregorain dateByAddingUnit:NSCalendarUnitDay value:1 toDate:date options:0];
- Is date in today/tomorrow/yesterday/weekend
BOOL isToday = [self.gregorian isDateInToday:date];
BOOL isYesterday = [self.gregorian isDateInYesterday:date];
BOOL isTomorrow = [self.gregorian isDateInTomorrow:date];
BOOL isWeekend = [self.gregorian isDateInWeekend:date];
- Compare two dates
BOOL sameDay = [self.gregorian isDate:date1 inSameDayAsDate:date2];
// Yes if the date1 and date2 are in same day
[self.gregorian compareDate:date1 toDate:date2 toUnitGranularity:unit];
// compare the era/year/month/day/hour/minute .etc ...
// return NSOrderAscending/NSOrderSame/NSOrderDecending
BOOL inSameUnit = [self.gregorian isDate:date1 equalToDate:date2 toUnitGranularity:unit];
// if the given unit (era/year/month/day/hour/minute .etc) are the same
Support this repo
Contact
If your made a beautiful calendar with this library in your app, please take a screen shot and @me in twitter. Your help really means a lot to me!
如果你用这个库完成了一个外观漂亮的日历,希望你能将这个漂亮的日历截图在微博中@我,十分感谢!
License
FSCalendar is available under the MIT license. See the LICENSE file for more info.
###Documentation | More Usage | 简书











