中转--RecordViewController-

2018-06-21  本文已影响14人  香蕉你个菠萝

//LXCalendar

import "RecordViewController.m"

//
//  RecordViewController.m
//  DXYiGe
//
//  Created by JHT on 2018/6/21.
//  Copyright © 2018年 QC. All rights reserved.
//

#import "RecordViewController.h"
#import "RecordMainView.h"
#import "RecordViewModel.h"

@interface RecordViewController ()
@property (nonatomic,strong) RecordMainView *mainView;
@property (nonatomic,strong) RecordViewModel *viewModel;
@end

@implementation RecordViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

-(void)addChildView {
    [self.view addSubview:self.mainView];
}

-(void)updateViewConstraints {
    [self.mainView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.view);
    }];
    [super updateViewConstraints];
}

-(RecordMainView *)mainView {
    if (!_mainView) {
        _mainView = [[RecordMainView alloc] initWithViewModel:self.viewModel];
    }
    return _mainView;
}

-(RecordViewModel *)viewModel {
    if (!_viewModel) {
        _viewModel = [[RecordViewModel alloc] init];
    }
    return _viewModel;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end

RecordMainView

//
//  RecordMainView.m
//  DXYiGe
//
//  Created by JHT on 2018/6/21.
//  Copyright © 2018年 QC. All rights reserved.
//

#import "RecordMainView.h"
#import "RecordViewModel.h"
#import "RecordHeadCollectView.h"
#import "RecordDiaryCell.h"

@interface RecordMainView ()<UITableViewDelegate,UITableViewDataSource>

@property (nonatomic,strong) RecordViewModel *viewModel;
@property (nonatomic,strong) RecordHeadCollectView *headView;
@property (nonatomic,strong) UITableView *tableView;
@property (nonatomic,strong) NSMutableArray *diaryArray;//底部

@property (nonatomic,strong) NSMutableArray *dayArray;//

@end

@implementation RecordMainView

-(instancetype)initWithViewModel:(id<BaseViewModelProtocol>)viewModel {
    self.viewModel = (RecordViewModel *)viewModel;
    return [super initWithViewModel:self.viewModel];
}

-(void)bindViewModel {
    
    
}

-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.diaryArray.count;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 50;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    RecordDiaryCell * cell = [tableView dequeueReusableCellWithIdentifier:[NSString stringWithUTF8String:object_getClassName([RecordDiaryCell class])]];
    
    return cell;
}
-(NSMutableArray *)diaryArray {
    if (!_diaryArray) {
        _diaryArray = [NSMutableArray arrayWithObjects:@"1",@"", @"",@"",@"",@"6",nil];
    }
    return _diaryArray;
}
-(void)setupViews {
    [self addSubview:self.tableView];
    [self setNeedsUpdateConstraints];
    [self updateConstraintsIfNeeded];
}
-(void)updateConstraints {
    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self);
    }];
    [super updateConstraints];
}

-(RecordHeadCollectView *)headView {
    if (!_headView) {
        _headView = [[RecordHeadCollectView alloc] initWithViewModel:self.viewModel];
        _headView.backgroundColor = DEFAULT_YELLOW_COLOR;

        
    }
    return _headView;
}

-(UITableView *)tableView {
    if (!_tableView) {
        _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
        _tableView.delegate = self;
        _tableView.dataSource = self;
        _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
        [_tableView registerClass:[RecordDiaryCell class] forCellReuseIdentifier:[NSString stringWithUTF8String:object_getClassName([RecordDiaryCell class])]];
        
        self.headView.frame = CGRectMake(0, 0, SCREEN_WIDTH, (SCREEN_WIDTH-70)/7*5);
        [_tableView setTableHeaderView:self.headView];
        
        if (@available(iOS 11.0, *)) {
            _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
        }
    }
    return _tableView;
}
- (RecordViewModel *)viewModel {
    if (!_viewModel) {
        _viewModel = [[RecordViewModel alloc] init];
    }
    return _viewModel;
}

@end

RecordHeadCollectView

//
//  RecordHeadCollectView.m
//  DXYiGe
//
//  Created by JHT on 2018/6/21.
//  Copyright © 2018年 QC. All rights reserved.
//

#import "RecordHeadCollectView.h"
#import "RecordViewModel.h"
#import "RecordDayCollectionCell.h"

#import "NSString+NCDate.h"
#import "NSDate+GFCalendar.h"

@interface RecordHeadCollectView ()<UICollectionViewDataSource,UICollectionViewDelegate>
@property (nonatomic,strong) RecordViewModel *viewModel;
@property (nonatomic,strong) UICollectionView *collectionView;
@property (nonatomic,strong) NSMutableArray *dataArray;
@end

@implementation RecordHeadCollectView

-(instancetype)initWithViewModel:(id<BaseViewModelProtocol>)viewModel {
    self.viewModel = (RecordViewModel *)viewModel;
    return [super initWithViewModel:self.viewModel];
}
-(void)bindViewModel {
    
}

-(NSMutableArray *)dataArray {
    if (!_dataArray) {
        _dataArray = [NSMutableArray array];
        
        NSInteger first = [[NSDate date] firstWeekDayInMonth];
        NSInteger totalDays = [[NSDate date] totalDaysInMonth];
        
        //排列是周天开始
        if (first != 7) {
            for (int i = 0; i < first; i++) {
                [_dataArray addObject:@""];
            }
        }
       
        for (int j = 1; j <= totalDays; j++) {
            [_dataArray addObject:[NSString stringWithFormat:@"%d",j]];
        }
        
        NSLog(@"RecordCollect数据源->%@",_dataArray);
    
    }
    return _dataArray;
}

# pragma mark collectionView代理事件
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {

    return self.dataArray.count;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    RecordDayCollectionCell  *cell =[collectionView dequeueReusableCellWithReuseIdentifier:[NSString stringWithUTF8String:object_getClassName([RecordDayCollectionCell class])] forIndexPath:indexPath];
    cell.dayLabel.text = self.dataArray[indexPath.row];
    if (indexPath.row ==10) {
        cell.dayStatus = CollectionDayStatusToday;
    }else if (indexPath.row == 15){
        cell.dayStatus = CollectionDayStatusHaveDiary;
    }else {
        cell.dayStatus = CollectionDayStatusDefault;
    }
    return cell;
}

#pragma mark 图片点击
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return CGSizeMake((SCREEN_WIDTH-(14*0.1))/7, (SCREEN_WIDTH-70)/7);
}
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
    return UIEdgeInsetsMake(0, 0, 0, 0);
}
//layout协议
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
    
    return 0.1f;
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
    
    return 0.1f;
}

-(UICollectionView *)collectionView {
    if (!_collectionView) {
        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
        //设置滚动方向
        layout.scrollDirection = UICollectionViewScrollDirectionVertical;
        _collectionView = [[UICollectionView alloc] initWithFrame:self.bounds collectionViewLayout:layout];
        [layout setItemSize:CGSizeMake((SCREEN_WIDTH-(14*0.1))/7, (SCREEN_WIDTH-70)/7)];
        
        _collectionView.delegate = self;
        _collectionView.dataSource = self;
        _collectionView.pagingEnabled = NO;
        _collectionView.showsHorizontalScrollIndicator = NO;
        _collectionView.showsVerticalScrollIndicator = NO;
        _collectionView.backgroundColor = DEFAULT_YELLOW_COLOR;
        [_collectionView registerClass:[RecordDayCollectionCell class] forCellWithReuseIdentifier:[NSString stringWithUTF8String:object_getClassName([RecordDayCollectionCell class])]];
        
    }
    return _collectionView;
}

-(void)setupViews {
    [self addSubview:self.collectionView];
    [self setNeedsUpdateConstraints];
    [self updateConstraintsIfNeeded];
}
-(void)updateConstraints {
    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self);
    }];
    [super updateConstraints];
}
- (RecordViewModel *)viewModel {
    if (!_viewModel) {
        _viewModel = [[RecordViewModel alloc] init];
    }
    return _viewModel;
}

@end

RecordDayCollectionCell.h

//
//  RecordDayCollectionCell.h
//  DXYiGe
//
//  Created by JHT on 2018/6/21.
//  Copyright © 2018年 QC. All rights reserved.
//

#import <UIKit/UIKit.h>

typedef NS_ENUM(NSUInteger, CollectionDayStatus) {
    CollectionDayStatusDefault,
    CollectionDayStatusToday,
    CollectionDayStatusHaveDiary,
};

@interface RecordDayCollectionCell : UICollectionViewCell
@property (nonatomic,strong) UILabel *dayLabel;
@property (nonatomic,assign) CollectionDayStatus dayStatus;
@end

RecordDayCollectionCell.m

//
//  RecordDayCollectionCell.m
//  DXYiGe
//
//  Created by JHT on 2018/6/21.
//  Copyright © 2018年 QC. All rights reserved.
//

#import "RecordDayCollectionCell.h"

@implementation RecordDayCollectionCell

-(UILabel *)dayLabel {
    if (!_dayLabel) {
        _dayLabel = [[UILabel alloc] init];
        _dayLabel.font = [UIFont systemFontOfSize:12];
        _dayLabel.textAlignment = NSTextAlignmentCenter;
        _dayLabel.layer.cornerRadius = (SCREEN_WIDTH-120)/14;
        _dayLabel.layer.masksToBounds = YES;
        _dayLabel.backgroundColor = DEFAULT_YELLOW_COLOR;
        
    }
    return _dayLabel;
}
-(void)setDayStatus:(CollectionDayStatus)dayStatus {
    
    switch (dayStatus) {
        case CollectionDayStatusDefault:
        {
            
        }
            break;
        case CollectionDayStatusToday:
        {
            _dayLabel.backgroundColor = [UIColor whiteColor];
        }
            break;
        case CollectionDayStatusHaveDiary:
        {
            _dayLabel.layer.borderWidth = 1.0f;
            _dayLabel.layer.borderColor = [UIColor whiteColor].CGColor;
        }
            break;
        default:
            break;
    }
}
-(instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        self.contentView.backgroundColor = DEFAULT_YELLOW_COLOR;
        [self addSubview:self.dayLabel];
        [self setNeedsUpdateConstraints];
        [self updateConstraintsIfNeeded];
    }
    return self;
}

-(void)updateConstraints {
    [self.dayLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self.contentView);
        make.size.mas_offset(CGSizeMake((SCREEN_WIDTH-120)/7, (SCREEN_WIDTH-120)/7));
    }];
    [super updateConstraints];
}

@end

NSDate+GFCalendar.h


#import <Foundation/Foundation.h>

@interface NSDate (GFCalendar)

/**
 *  获得当前 NSDate 对象对应的日子
 */
- (NSInteger)dateDay;

/**
 *  获得当前 NSDate 对象对应的月份
 */
- (NSInteger)dateMonth;

/**
 *  获得当前 NSDate 对象对应的年份
 */
- (NSInteger)dateYear;

/**
 *  获得当前 NSDate 对象的上个月的某一天(此处定为15号)的 NSDate 对象
 */
- (NSDate *)previousMonthDate;

/**
 *  获得当前 NSDate 对象的下个月的某一天(此处定为15号)的 NSDate 对象
 */
- (NSDate *)nextMonthDate;

/**
 *  获得当前 NSDate 对象对应的月份的总天数
 */
- (NSInteger)totalDaysInMonth;

/**
 *  获得当前 NSDate 对象对应月份当月第一天的所属星期
 */
- (NSInteger)firstWeekDayInMonth;

@end

NSDate+GFCalendar.m


#import "NSDate+GFCalendar.h"

@implementation NSDate (GFCalendar)

- (NSInteger)dateDay {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components = [calendar components:NSCalendarUnitDay fromDate:self];
    return components.day;
}

- (NSInteger)dateMonth {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components = [calendar components:NSCalendarUnitMonth fromDate:self];
    return components.month;
}

- (NSInteger)dateYear {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components = [calendar components:NSCalendarUnitYear fromDate:self];
    return components.year;
}

- (NSDate *)previousMonthDate {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    
    NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:self];
    components.day = 15; // 定位到当月中间日子
    
    if (components.month == 1) {
        components.month = 12;
        components.year -= 1;
    } else {
        components.month -= 1;
    }
    
    NSDate *previousDate = [calendar dateFromComponents:components];
    
    return previousDate;
}

- (NSDate *)nextMonthDate {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    
    NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:self];
    components.day = 15; // 定位到当月中间日子
    
    if (components.month == 12) {
        components.month = 1;
        components.year += 1;
    } else {
        components.month += 1;
    }
    
    NSDate *nextDate = [calendar dateFromComponents:components];
    
    return nextDate;
}

- (NSInteger)totalDaysInMonth {
    NSInteger totalDays = [[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:self].length;
    return totalDays;
}

- (NSInteger)firstWeekDayInMonth {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    
    NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:self];
    components.day = 1; // 定位到当月第一天
    NSDate *firstDay = [calendar dateFromComponents:components];
    
    // 默认一周第一天序号为 1 ,而日历中约定为 0 ,故需要减一
    NSInteger firstWeekday = [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekOfMonth forDate:firstDay] - 1;
    
    return firstWeekday;
}

@end

NSString+NCDate.h


#import <Foundation/Foundation.h>

@interface NSString (NCDate)
+(NSString *)timeIntervalFromTimeStr:(NSString *)timeStr; //时间转换为时间戳
+(NSString *)formateDate:(NSString *)string;//时间戳转换为时间
+(NSInteger)getNowInterVal;//获取当前的时间戳
+(NSString *)getNowTime;//获取当前的时间字符串
+(NSString *)formateDateToDay:(NSString *)string;//时间戳转换为时间
+(NSString *)formateDateOnlyYueri:(NSString *)string;//时间戳转换为时间
+(NSString *)formateDateOnlyShifen:(NSString *)string;//时间戳转换为时间

+(NSDate *)dateFromTimeStr:(NSString *)timeStr;//年月日转换为date;
+(NSString *)ret32bitString;//随机的32位字符串
@end

NSString+NCDate.m


#import "NSString+NCDate.h"

@implementation NSString (NCDate)
+(NSString *)timeIntervalFromTimeStr:(NSString *)timeStr{
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    // 设置日期格式(为了转换成功)
    fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    // NSString * -> NSDate *
    NSDate *date = [fmt dateFromString:timeStr];
    
    return [NSString stringWithFormat:@"%.f",date.timeIntervalSince1970 *1000];
}
+(NSString *)formateDate:(NSString *)string{
    NSTimeInterval second = string.longLongValue / 1000.0; //毫秒需要除
    
    // 时间戳 -> NSDate *
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:second];
    //    NSLog(@"%@", date);
    
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"yyyy-MM-dd HH:mm";
    
    NSString *stringNew = [fmt stringFromDate:date];
    return stringNew;
}
+(NSString *)formateDateToDay:(NSString *)string{
    NSTimeInterval second = string.longLongValue / 1000.0; //毫秒需要除
    
    // 时间戳 -> NSDate *
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:second];
    //    NSLog(@"%@", date);
    
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"yyyy-MM-dd";
    
    NSString *stringNew = [fmt stringFromDate:date];
    return stringNew;
}

+(NSString *)formateDateOnlyYueri:(NSString *)string{
    NSTimeInterval second = string.longLongValue / 1000.0; //毫秒需要除
    
    // 时间戳 -> NSDate *
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:second];
    //    NSLog(@"%@", date);
    
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"MM-dd";
    
    NSString *stringNew = [fmt stringFromDate:date];
    return stringNew;
}
+(NSString *)formateDateOnlyShifen:(NSString *)string{
    
    NSTimeInterval second = string.longLongValue / 1000.0; //毫秒需要除
    
    // 时间戳 -> NSDate *
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:second];
    //    NSLog(@"%@", date);
    
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    fmt.dateFormat = @"HH:mm";
    
    NSString *stringNew = [fmt stringFromDate:date];
    return stringNew;
}
+(NSInteger)getNowInterVal{
    NSDate  *date = [NSDate date];
    return date.timeIntervalSince1970 * 1000; //乘以1000为毫秒
}
+(NSString *)getNowTime{
    NSDate  *date = [NSDate date];
    
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    // 设置日期格式(为了转换成功)
    fmt.dateFormat = @"yyyy-MM-dd";
    NSString *dateStr =[fmt stringFromDate:date];
    return dateStr;
}
+(NSDate *)dateFromTimeStr:(NSString *)timeStr{
    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
    // 设置日期格式(为了转换成功)
    [fmt setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
    fmt.dateFormat = @"yyyy-MM-dd";
    // NSString * -> NSDate *
    NSDate *date = [fmt dateFromString:timeStr];
    return date;
}

+(NSString *)ret32bitString

{
    
    char data[32];
    
    for (int x=0;x<32;data[x++] = (char)('A' + (arc4random_uniform(26))));
    
    return [[NSString alloc] initWithBytes:data length:32 encoding:NSUTF8StringEncoding];
    
}
@end

上一篇下一篇

猜你喜欢

热点阅读