美文网首页
iOS-简单日历

iOS-简单日历

作者: 勇敢的_心_ | 来源:发表于2018-05-08 14:11 被阅读25次

    效果图:


    date.png

    简单代码:

    #define collectionH (kMainScreenWidth-20)*6/7
    #define itemMargin 0
    NSString *const cellIdentifier = @"sttenceCell";
    
    <UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout>{
        UICollectionViewFlowLayout *_flowLayout;
    }
    @ppoperty(nonstick,strong) UIView *contentView;
    @property(nonatomic,strong) UIView *topView;
    @property(nonatomic,strong) UICollectionView *collectionView;
    @property(nonatomic,strong) UILabel *monthLabel;
    @property(nonatomic,strong) UIButton *previousBtn;
    @property(nonatomic,strong) UIButton *nextBtn;
    
    @property(nonatomic,strong) NSArray *weekDayArray;
    @property (nonatomic , strong) NSDate *date;
    @property (nonatomic , strong) NSDate *today;
    
    @property (weak, nonatomic) IBOutlet NSLayoutConstraint *contentViewHeight;
    
    _contentViewHeight.constant = collectionH+84;
     NSDate *day = [NSDate date];
     self.today = day;
     self.date = self.today;
     NSString *thisMonth =[NSString stringWithFormat:@"%li-%.2ld",[self year:self.date],[self month:self.date]];
    
    self.topView = [[UIView alloc] initWithFrame:CGRectMake(0,0, kMainScreenWidth, 84)];
        self.topView.backgroundColor = [UIColor whiteColor];
        [self.contentView addSubview:self.topView];
     self.previousBtn = [[UIButton alloc] initWithFrame:CGRectMake(10, 0, 40, 40)];
        [self.previousBtn setImage:[UIImage imageNamed:@"backGray"] forState:UIControlStateNormal];
        [self.previousBtn setImage:[UIImage imageNamed:@"backGray"] forState:UIControlStateHighlighted];
        [self.previousBtn addTarget:self action:@selector(previousBtnClick:) forControlEvents:UIControlEventTouchUpInside];
        [self.topView addSubview:self.previousBtn];
        self.nextBtn = [[UIButton alloc] initWithFrame:CGRectMake(kMainScreenWidth-10-40, 0, 40, 40)];
        [self.nextBtn setImage:[UIImage imageNamed:@"rightArrow"] forState:UIControlStateNormal];
        [self.nextBtn setImage:[UIImage imageNamed:@"rightArrow"] forState:UIControlStateHighlighted];
        [self.nextBtn addTarget:self action:@selector(nextBtnClick:) forControlEvents:UIControlEventTouchUpInside];
        [self.topView addSubview:self.nextBtn];
        self.monthLabel = [[UILabel alloc] initWithFrame:CGRectMake(10+40, 0, kMainScreenWidth-100, 40)];
        self.monthLabel.text = @"2018年2月";
        self.monthLabel.textColor = [UIColor lightGrayColor];
        self.monthLabel.textAlignment = NSTextAlignmentCenter;
        [self.topView addSubview:self.monthLabel];
    
        UIView *weekV = [[UIView alloc] initWithFrame:CGRectMake(0, 40, kMainScreenWidth, 44)];
        weekV.backgroundColor = RGB(234, 234, 234);
        [self.topView addSubview:weekV];
        _weekDayArray = @[@"周日",@"周一",@"周二",@"周三",@"周四",@"周五",@"周六"];
        CGFloat weekW = (kMainScreenWidth-20)/7;
        for (int i = 0; i< 7; i++) {
            UILabel *week = [[UILabel alloc] init];
            week.text = _weekDayArray[i];
            week.textColor = [UIColor darkGrayColor];
            week.textAlignment = NSTextAlignmentCenter;
            week.frame = CGRectMake(10+weekW*i, 0, weekW, 44);
            [weekV addSubview:week];
        }
    
        // collectionView
        _flowLayout = [[UICollectionViewFlowLayout alloc] init];
        UIView *collectView = [[UIView alloc] initWithFrame:CGRectMake(0,84, kMainScreenWidth, collectionH)];
        collectView.backgroundColor = [UIColor whiteColor];
        [self.contentView addSubview:collectView];
        self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(10,0, kMainScreenWidth-20, collectionH) collectionViewLayout:_flowLayout];
        //self.collectionView.backgroundColor = RGB(244, 244, 244);
        self.collectionView.backgroundColor = [UIColor whiteColor];
        [collectView addSubview:self.collectionView];
    
        self.collectionView.dataSource = self;
        self.collectionView.delegate = self;
    
        // 布局
        CGFloat topPading = itemMargin;
        CGFloat itemSpacing = itemMargin;
        CGFloat lineSpacing = itemMargin;
        CGFloat leftPading  = itemMargin;
        CGFloat itemW = (kMainScreenWidth-20-8*itemMargin)/7;
        CGFloat itemH = itemW;
        _flowLayout.itemSize = CGSizeMake(itemW, itemH);
        _flowLayout.minimumInteritemSpacing = itemSpacing;
        _flowLayout.minimumLineSpacing = lineSpacing;
        _flowLayout.sectionInset = UIEdgeInsetsMake(topPading, leftPading, topPading, leftPading);
        [_collectionView setCollectionViewLayout:_flowLayout animated:YES];
        //注册cell
        [_collectionView registerNib:[UINib nibWithNibName:@"GEAttendanceCell" bundle:nil] forCellWithReuseIdentifier:attenceCellIdentifier];
    
    - (void)setDate:(NSDate *)date
    {
        _date = date;
        [_monthLabel setText:[NSString stringWithFormat:@"%li-%.2ld",[self year:date],[self month:date]]];
    }
    
    #pragma -mark collectionView delegate
    - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
    {
        return 1;
    }
    
    - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
    {
        NSInteger daysInThisMonth = [self totaldaysInMonth:_date];
        NSInteger firstWeekday = [self firstWeekdayInThisMonth:_date];
        NSUInteger count = daysInThisMonth+firstWeekday;
        return count;
    }
    
    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    {
    
        GEAttendanceCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:attenceCellIdentifier forIndexPath:indexPath];
    
        NSInteger daysInThisMonth = [self totaldaysInMonth:_date];
        NSInteger firstWeekday = [self firstWeekdayInThisMonth:_date];
        NSInteger day = 0;
        NSInteger i = indexPath.row;
    
        if (i < firstWeekday) {
            cell.contentView.hidden = YES;
            cell.layer.borderWidth=0.0;
        }else if (i > firstWeekday + daysInThisMonth - 1){
            //cell.contentVIew.hidden = YES;
        }else{
            cell.contentView.hidden = NO;
    
            day = i - firstWeekday + 1;
            [cell.dateTime setText:[NSString stringWithFormat:@"%li",day]];
            [cell.dateTime setTextColor:[UIColor darkGrayColor]];
    
            //NSUInteger inx = indexPath.row-firstWeekday;
            //cell.attencesModel = _attendaceLsit[inx];
           // cell.markLabel.backgroundColor = [UIColor whiteColor];
            
            //this month
            if ([_today isEqualToDate:_date]) {
                if (day == [self day:_date]) {
                    cell.dateTime.backgroundColor = RGB(0, 207, 151);
                    cell.dateTime.layer.cornerRadius=10;
                    cell.dateTime.layer.masksToBounds=YES;
    
                } else if (day > [self day:_date]) {
                    [cell.dateTime setTextColor:[UIColor lightGrayColor]];
                }
            } else if ([_today compare:_date] == NSOrderedAscending) {
                [cell.dateTime setTextColor:[UIColor lightGrayColor]];
            }
    
            cell.layer.borderColor=RGB(244, 244, 244).CGColor;
            cell.layer.borderWidth=0.3;
        }
    
        return cell;
    
    }
    
    - (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
    {
    
        NSInteger daysInThisMonth = [self totaldaysInMonth:_date];
        NSInteger firstWeekday = [self firstWeekdayInThisMonth:_date];
    
        NSInteger day = 0;
        NSInteger i = indexPath.row;
    
        if (i >= firstWeekday && i <= firstWeekday + daysInThisMonth - 1) {
            day = i - firstWeekday + 1;
    
            //this month
            if ([_today isEqualToDate:_date]) {
                if (day <= [self day:_date]) {
                    return YES;
                }
            } else if ([_today compare:_date] == NSOrderedDescending) {
                return YES;
            }
        }
    
        return NO;
    }
    
    #pragma mark btnClick
    - (void)previousBtnClick:(UIButton *)btn
    {
        self.previousBtn.enabled = NO;
        [self performSelector:@selector(previousbtn:) withObject:nil afterDelay:1.0f];
        self.date = [self lastMonth:self.date];
        //NSString *pTime =[NSString stringWithFormat:@"%li%.2ld-%ld",[self year:self.date],[self month:self.date],[self totaldaysInMonth:self.date]];
        NSString *pTime =[NSString stringWithFormat:@"%li%.2ld",[self year:self.date],[self month:self.date]];
    
        [self loadHttpDataWithAttendanceDate:pTime];
    
    }
    - (void)nextBtnClick:(UIButton *)btn
    {
        self.nextBtn.enabled = NO;
        [self performSelector:@selector(nextbtn:) withObject:nil afterDelay:1.0f];
        self.date = [self nextMonth:self.date];
        NSString *nTime =[NSString stringWithFormat:@"%li%.2ld",[self year:self.date],[self month:self.date]];
    
        [self loadHttpDataWithAttendanceDate:nTime];
    
    }
    - (void)previousbtn:(UIButton *)btn
    {
        self.previousBtn.enabled = YES;
    }
    - (void)nextbtn:(UIButton *)btn
    {
        self.nextBtn.enabled = YES;
    }
    
    #pragma mark - date
    - (NSInteger)day:(NSDate *)date{
        NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
        return [components day];
    }
    - (NSInteger)month:(NSDate *)date{
        NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
        return [components month];
    }
    - (NSInteger)year:(NSDate *)date{
        NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
        return [components year];
    }
    - (NSInteger)firstWeekdayInThisMonth:(NSDate *)date{
        NSCalendar *calendar = [NSCalendar currentCalendar];
    
        [calendar setFirstWeekday:1];//1.Sun. 2.Mon. 3.Thes. 4.Wed. 5.Thur. 6.Fri. 7.Sat.
        NSDateComponents *comp = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
        [comp setDay:1];
        NSDate *firstDayOfMonthDate = [calendar dateFromComponents:comp];
    
        NSUInteger firstWeekday = [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekOfMonth forDate:firstDayOfMonthDate];
        return firstWeekday - 1;
    }
    - (NSInteger)totaldaysInThisMonth:(NSDate *)date{
        NSRange totaldaysInMonth = [[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date];
        return totaldaysInMonth.length;
    }
    - (NSInteger)totaldaysInMonth:(NSDate *)date{
        NSRange daysInLastMonth = [[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date];
        return daysInLastMonth.length;
    }
    - (NSDate *)lastMonth:(NSDate *)date{
        NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
        dateComponents.month = -1;
        NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:date options:0];
        return newDate;
    }
    - (NSDate*)nextMonth:(NSDate *)date{
        NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
        dateComponents.month = +1;
        NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:date options:0];
        return newDate;
    }
    

    相关文章

      网友评论

          本文标题:iOS-简单日历

          本文链接:https://www.haomeiwen.com/subject/wibqlftx.html