FSCalendar/Example-Objc/MultipleSelectionViewContro...

114 lines
4.0 KiB
Objective-C

//
// MultipleSelectionViewController.m
// FSCalendar
//
// Created by dingwenchao on 9/9/15.
// Copyright (c) 2015 wenchaoios. All rights reserved.
//
#import "MultipleSelectionViewController.h"
@interface MultipleSelectionViewController ()
@property (strong, nonatomic) NSDateFormatter *dateFormatter;
@property (strong, nonatomic) NSCalendar *gregorian;
@end
@implementation MultipleSelectionViewController
- (instancetype)init
{
self = [super init];
if (self) {
self.title = @"FSCalendar";
}
return self;
}
- (void)loadView
{
UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
view.backgroundColor = [UIColor groupTableViewBackgroundColor];
self.view = view;
CGFloat height = [[UIDevice currentDevice].model hasPrefix:@"iPad"] ? 450 : 300;
FSCalendar *calendar = [[FSCalendar alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.navigationController.navigationBar.frame), view.bounds.size.width, height)];
calendar.dataSource = self;
calendar.delegate = self;
calendar.backgroundColor = [UIColor whiteColor];
calendar.allowsMultipleSelection = YES;
[self.view addSubview:calendar];
self.calendar = calendar;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
self.dateFormatter = [[NSDateFormatter alloc] init];
self.dateFormatter.dateFormat = @"yyyy/MM/dd";
NSDate *tomorrow = [self.gregorian dateByAddingUnit:NSCalendarUnitDay value:1 toDate:[NSDate date] options:0];
[_calendar selectDate:tomorrow];
}
- (BOOL)calendar:(FSCalendar *)calendar shouldSelectDate:(NSDate *)date
{
BOOL shouldDedeselect = [self.gregorian component:NSCalendarUnitDay fromDate:date] != 5;
if (!shouldDedeselect) {
[[[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"Forbidden date %@ to be selected",[self.dateFormatter stringFromDate:date]] message:@"" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];
return NO;
}
return YES;
}
- (BOOL)calendar:(FSCalendar *)calendar shouldDeselectDate:(NSDate *)date
{
BOOL shouldDedeselect = [self.gregorian component:NSCalendarUnitDay fromDate:date] != 7;
if (!shouldDedeselect) {
[[[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"Forbidden date %@ to be deselected",[self.dateFormatter stringFromDate:date]] message:@"" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];
return NO;
}
return YES;
}
- (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition
{
NSMutableArray *selectedDates = [NSMutableArray arrayWithCapacity:calendar.selectedDates.count];
[calendar.selectedDates enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[selectedDates addObject:[self.dateFormatter stringFromDate:obj]];
}];
NSLog(@"selected dates is %@",selectedDates);
}
- (void)calendar:(FSCalendar *)calendar didDeselectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition
{
NSMutableArray *selectedDates = [NSMutableArray arrayWithCapacity:calendar.selectedDates.count];
[calendar.selectedDates enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[selectedDates addObject:[self.dateFormatter stringFromDate:obj]];
}];
NSLog(@"selected dates is %@",selectedDates);
}
- (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance selectionColorForDate:(NSDate *)date
{
if ([self.gregorian component:NSCalendarUnitDay fromDate:date] % 2 == 0) {
return appearance.selectionColor;
}
return [UIColor purpleColor];
}
- (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance borderDefaultColorForDate:(NSDate *)date
{
if ([@[@17,@18,@19] containsObject:@([self.gregorian component:NSCalendarUnitDay fromDate:date])]) {
return [UIColor magentaColor];
}
return appearance.borderDefaultColor;
}
@end