Giter VIP home page Giter VIP logo

xiaozhuxiong121 / pgdatepicker Goto Github PK

View Code? Open in Web Editor NEW
1.1K 14.0 207.0 5.71 MB

日期选择器,支持年、年月、年月日、年月日时、年月日时分、年月日时分秒、月日、月日时、月日时分、月日时分秒、时、时分、时分秒、分秒、月日周 时分等

License: MIT License

Ruby 0.36% Objective-C 95.83% Swift 3.80%
uipickerview datepicker uidatepicker pickerview

pgdatepicker's Introduction

PGDatePicker

日期选择器,支持年、年月、年月日、年月日时、年月日时分、年月日时分秒、月日、月日时、月日时分、月日时分秒、时、时分、时分秒、分秒、月日周 时分等,内置了3种样式。

由于使用UIPickerView的话,列表会有个弧度,所以这里用了PGPickerView

PGDatePicker CocoaPods compatible

直接看如何使用:Wiki

样式1

year

样式2

year

样式3

year

只显示中间的文字,设置isHiddenMiddleTextfalse即可,默认是true

年份

year

年月

year

年月日

year

年月日时

year

年月日时分

year

年月日时分秒

year

月日

year

月日时

year

月日时分

year

月日时分秒

year

时分

year

时分秒

year

分秒

year

月日周 时分

year

其他样式

屏幕快照1

其他样式

屏幕快照2

设置自己的样式

如果内置的样式都满足不了你的需要,想自己设置样式,也是完全支持的,可以将PGDatePicker创建出来添加到你的View上。

PGDatePicker *datePicker = [[PGDatePicker alloc]init];
[self.view addSubview:datePicker];

PGDatePickManager类就是一个典型的例子,你可以下载源码查看PGDatePickManager的简单实现,或许对你自己封装会有所帮助。

Swift使用

查看使用文档

CocoaPods安装

pod 'PGDatePicker'

1.5.1版本中对iPhone X进行了适配

使用

引入头文件

#import <PGDatePick/PGDatePickManager.h>
PGDatePickManager *datePickManager = [[PGDatePickManager alloc]init];
PGDatePicker *datePicker = datePickManager.datePicker;
datePicker.delegate = self;
[self presentViewController:datePickManager animated:false completion:nil];

Delegate

#pragma PGDatePickerDelegate
- (void)datePicker:(PGDatePicker *)datePicker didSelectDate:(NSDateComponents *)dateComponents {
NSLog(@"dateComponents = %@", dateComponents);
}

Block

datePicker.selectedDate = ^(NSDateComponents *dateComponents) {
    NSLog(@"dateComponents = %@", dateComponents);
};

如果不设置minimumDatemaximumDate默认是无穷小和无穷大

语言跟着手机系统语言走,默认有英文,中文,繁体中文,如果是模拟器的话,将模拟器的系统语言改成中文即显示中文

设置弧度(目前还是不太好,待优化)

datePicker.isHiddenWheels = false;

设置循环滚动

datePicker.isCycleScroll = true;

设置样式

PGDatePickManager *datePickManager = [[PGDatePickManager alloc]init];
PGDatePicker *datePicker = datePickManager.datePicker;
datePicker.delegate = self;
datePicker.datePickerMode = PGDatePickerModeDate;
[self presentViewController:datePickManager animated:false completion:nil];

datePickManager.titleLabel.text = @"PGDatePicker";
//设置半透明的背景颜色
datePickManager.isShadeBackgroud = true;
//设置头部的背景颜色
datePickManager.headerViewBackgroundColor = [UIColor orangeColor];
//设置线条的颜色
datePicker.lineBackgroundColor = [UIColor redColor];
//设置选中行的字体颜色
datePicker.textColorOfSelectedRow = [UIColor redColor];
//设置未选中行的字体颜色
datePicker.textColorOfOtherRow = [UIColor blackColor];
//设置取消按钮的字体颜色
datePickManager.cancelButtonTextColor = [UIColor blackColor];
//设置取消按钮的字
datePickManager.cancelButtonText = @"Cancel";
//设置取消按钮的字体大小
datePickManager.cancelButtonFont = [UIFont boldSystemFontOfSize:17];

//设置确定按钮的字体颜色
datePickManager.confirmButtonTextColor = [UIColor redColor];
//设置确定按钮的字
datePickManager.confirmButtonText = @"Sure";
//设置确定按钮的字体大小
datePickManager.confirmButtonFont = [UIFont boldSystemFontOfSize:17];

非常感谢xyhuangjia添加隐藏字的功能

//首先将isHiddenMiddleText设置为false
datePicker.isHiddenMiddleText = false;

//然后设置showUnit
datePicker.showUnit = PGShowUnitTypeNone;

typedef NS_ENUM(NSUInteger, PGShowUnitType) {
    PGShowUnitTypeAll,      //显示全部的字
    PGShowUnitTypeCenter,   //只显示中间的字
    PGShowUnitTypeNone,     //什么字都不显示
};

非常感谢sujiewen添加的如下功能
1、只显示时的功能
2、对时分间隔自定义支持

//在时分的时候,只显示时
@property (nonatomic) BOOL isOnlyHourFlag;

//分间隔 默认时1
@property (nonatomic) NSInteger minuteInterval;

//秒间隔 默认时1
@property (nonatomic) NSInteger secondInterval;

非常感谢Graphicooooone添加的自定义收起动画接口的功能

/**
 custom dismiss controller animation, return the total duration of the custom animation, default is nil
 */
@property (nonatomic, copy) NSTimeInterval(^customDismissAnimation)(UIView* dismissView, UIView* contentView ); 

最新版本

CocoaPods compatible

想说的话

大家有好的idea欢迎随时提交PR,共同维护。

许可证

PGDatePicker 使用 MIT 许可证,详情见 LICENSE 文件。

pgdatepicker's People

Contributors

feixue299 avatar lukehsbc avatar sujiewen avatar xiaozhuxiong121 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pgdatepicker's Issues

pod 出错

[!] Unable to satisfy the following requirements:

  • PGDatePicker (>= 2.0) required by Podfile

None of your spec sources contain a spec satisfying the dependency: PGDatePicker (>= 2.0).

You have either:

  • out-of-date source repos which you can update with pod repo update or with pod install --repo-update.
  • mistyped the name or version.
  • not added the source repo that hosts the Podspec to your Podfile.

Note: as of CocoaPods 1.0, pod repo update does not happen on pod install by default.

有没有方法添加一个半透明背景

个人认为需要添加一个半透明背景的方法。好多设计图弹选择器都加了一个黑色半透明遮罩。

比如增加一个show方法,在用一个属性可以改变遮罩的颜色

  • (void)showWithShadeBackgroud:(BOOL)isShowShade;

重复调用show函数视图已有但是位置不正确

作者大大好!
[UIView animateWithDuration:0.3 animations:^{ self.headerView.frame = CGRectMake(0, kScreenHeight - height - kHeaderViewHeight, kScreenWidth, kHeaderViewHeight); self.frame = CGRectMake(0, CGRectGetMaxY(self.headerView.frame), kScreenWidth, height); }];

这段代码应该加在-show函数的结尾,而不应该在layoutsubviews,因为重复调用show的话,并没有弹出显示。。。

设置maximumDate后出现bug

设置maximumDate为当前日期后,当年份视图滑动到小于当前年时候,月份不能显示12个月,参考图如下:
2017-09-05 10 19 08

Question

你好,我想问下,我安装PGDatePicker成功了,但是在import的时候为什么会报错,说PGDatePicker不存在啊

请教个问题!

大神 我想按照你的样式 更改为城市选择器 想把数据换掉 请问应该那个地方开始 我没找到你导入数据的地方。。。。

Pod失败

根据文档进行Pod,但是提示失败了,请问是我自己的问题还是你传的有问题?

bug

PGDatePicker的 setDate方法如果animated 是yes 的话会造成页面卡顿的定位不准确

显示年月的时候,最大最小时间限制有问题

- (IBAction)yearAndMonthHandler:(id)sender {
    PGDatePicker *datePicker = [[PGDatePicker alloc]init];
    datePicker.delegate = self;
    [datePicker showWithShadeBackgroud];
    datePicker.datePickerType = PGPickerViewType3;
    datePicker.datePickerMode = PGDatePickerModeYearAndMonth;
    
    
    datePicker.minimumDate = [NSDate setYear:2015 month:5];
    datePicker.maximumDate = [NSDate setYear:2017 month:10];
    
    
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm";
    NSDate *date = [dateFormatter dateFromString: @"2015-08-10 05:04"];
    [datePicker setDate:date animated:true];
}

只显示年月的时候。设置最大最小时间限制的时候有两个问题。如果调用setDate:animated:设置一个默认选中的时间,而该时间是月份不全的年份中,那么该年份会显示完整的月份。最小时间限制没有作用。比如最小时间设置为2015年5月。然后setdate为2015年的随便一个月份。那么2015年对应的月份可以选到1~10月,后面的11月12月也没有了,是因为最大时间是2017年10月。就是两个bug

一个建议

小于10的月日时分秒能不能改成00,01,02,03......格式!!!

日期选择bug

操作如下:
当mode为PGDatePickerModeDate时,选择2018年5月31日,当将月份滚动到4月时,日的那一列不跟年月两列对其。

设置minimumDate和maximumDate后的bug

你好,我发现设置时日周 时分这里,设置他的minimumDate和maximumDate后,滑动月日和时之后,他的分会出现问题,截图如下
1515415605962

wechatimg493
wechatimg494
wechatimg495

只能选择一个分了。_minuteList里面只有一个元素了。

动态设置最小值最大值存在异常

if self.maxEndDate != nil {
datePicker.maximumDate = self.maxEndDate!
}
if self.minEndDate != nil {
datePicker.minimumDate = self.minEndDate!
}

这样动态的设置区间最大值为默认值加六个月 最小值加一个月 为什么最小值设置正常 最大值设置失败呢?
但是加六个跨年后 设置的区间却是正确的。 不跨年所有情况都是直接显示到12月份

时间选择有问题

c5116a94-e50a-4c9e-b8b8-36597100545a
[datePicker setDate:date animated:true];不跳转到对应的时间,差了几个月

发现个小问题

在执行show方法之前设定titleLabel属性时无效,原因是在show之前没创建相应的控件。还有titleColorForOtherRow该属性设置无效,望及时解决。

关于时分选择

打开时间选择,默认显示上一次选中的的时间是
NSDate *date = [NSDate setHour:10 minute:10];
[datePicker setDate:date animated:true];
这样么,

滚动时,有残留,但是运行您的DEMO,没有任何问题。不知道为何

版本:通过pod 'PGDatePicker', '>= 2.0'引入
用法:
PGDatePickManager *datePickManager=[[PGDatePickManager alloc]init]; datePickManager.cancelButtonTextColor=BLUEPRIMARY; datePickManager.confirmButtonTextColor=BLUEPRIMARY; datePickManager.isShadeBackgroud=YES; PGDatePicker *datePicker = datePickManager.datePicker; datePicker.datePickerMode=PGDatePickerModeDateHourMinute; datePicker.datePickerType=PGDatePickerType1; datePicker.delegate = self; datePicker.minimumDate=[NSDate new]; datePicker.maximumDate=[TimeUtil getFutureDate:100]; [self.controller presentViewController:datePickManager animated:false completion:nil];

如图:
image
image

设置最小的天数发现没有用,调试发现代码中你过滤掉了最小的天数

- (void)setDayListForMonthDays:(NSInteger)day { NSMutableArray *days = [NSMutableArray arrayWithCapacity:day]; NSInteger minDay = self.minimumComponents.day, maxDay = self.maximumComponents.day; if (self.currentComponents.year == self.maximumComponents.year) { if (self.currentComponents.month == self.maximumComponents.month) { day = maxDay; } } if (_setDate) { minDay = 1; } // 此处 i 的值应为minDay for (NSUInteger i = 1; i <= day; i++) { [days addObject:[@(i) stringValue]]; } self.dayList = days; }

日期最大最小有问题

例如设置 2017-9-30最小 2017-10-2最大 ,初始化时日期列显示所有,在滚动第二列后才显示正确的日期选择列
另外, 调用消失后不进行初始化仅调用show方法无效,需要重新初始化或自己修改代码,忘以后完善

发现一个功能上的问题

在设置样式过程中, 选中行的颜色与非选中行的颜色并没有效果区分
datePicker.titleColorForSelectedRow = [UIColor redColor];
datePicker.titleColorForOtherRow = [UIColor blackColor];

同时设置最大日期和最小日期,出现错误

- (void)showDatePicker {
    PGDatePicker *datePicker = [[PGDatePicker alloc] init];
    datePicker.delegate = self;
    datePicker.datePickerMode = PGDatePickerModeYearAndMonth;
    
    NSDateFormatter *dataFormant = [[NSDateFormatter alloc] init];
    [dataFormant setDateFormat: @"yyyyMM"];
    NSString *newtime = [dataFormant stringFromDate:[NSDate date]];
    
    datePicker.maximumDate = [dataFormant dateFromString:newtime];
    
    if ([EMUtil isValidString: self.model.from]) {
        if (!self.chooseFrom) {
            //选择了开始时间再去选结束时间
            NSDate *mindate = [dataFormant dateFromString:self.model.from];
            datePicker.minimumDate = mindate;
        }
    }
    
    if ([EMUtil isValidString: self.model.to]) {
        if (self.chooseFrom) {
            // 选择了结束时间再去选开始时间
            NSDate *maxdate = [dataFormant dateFromString:self.model.to];
            datePicker.maximumDate = maxdate;
        }
    }
    
    [datePicker show];
} 

目前需求是选择开始时间和结束时间,现在选择了开始时间,想要限制结束时间选择框的选择范围在开始时间和当前时间之间。以上是代码。
当[datePicker show]执行后,选择框中的日期范围不对。
请看一下是我的代码有问题,还是这个库实现的有问题。谢谢。

怎么改变PGPickerView的位置

1,怎么改变PGPickerView的位置, 想把它放在中间
2,现在默认是选择第三行,怎么把它修改成第一行,如图把选中的那里放在箭头指向位置
3,江湖救急,非常感谢
image

- (void)setDate:(NSDate *)date animated:(BOOL)animated有个bug

PGDatePicker *datePicker = [[PGDatePicker alloc]init];
datePicker.delegate = self;
[datePicker show];
datePicker.datePickerMode = PGDatePickerModeYearAndMonth;
datePicker.minimumDate = [NSDate setYear:2017 month:11];
datePicker.maximumDate = [NSDate setYear:2017 month:12];
[datePicker setDate:_seletedDate];

月份只有11月12月,调用- (void)setDate:(NSDate *)date的时候,这样设置是不起作用的。
查看了下源码。原因在这个方法中- (void)setDate:(NSDate *)date animated:(BOOL)animated

case PGDatePickerModeYearAndMonth:
        {
            if (components.year > self.maximumComponents.year) {
                components.year = self.maximumComponents.year;
            }else if (components.year < self.minimumComponents.year) {
                components.year = self.minimumComponents.year;
            }
            NSInteger row = components.year - self.minimumComponents.year;
            [self.pickerView selectRow:row inComponent:0 animated:animated];
            {
                NSInteger row = 0;
    
                NSString *string = [NSString stringWithFormat:@"%ld", components.month];
                if ([string integerValue] <= self.monthList.count) {//原因在这里
                    row = [self.monthList indexOfObject:string];
                }
                [self.pickerView selectRow:row inComponent:1 animated:animated];
            }
        }

我添加了个修复的代码。但是只针对PGDatePickerModeYearAndMonth做了处理,其他模式下没用到就没管

case PGDatePickerModeYearAndMonth:
        {
            if (components.year > self.maximumComponents.year) {
                components.year = self.maximumComponents.year;
            }else if (components.year < self.minimumComponents.year) {
                components.year = self.minimumComponents.year;
            }
            NSInteger row = components.year - self.minimumComponents.year;
            [self.pickerView selectRow:row inComponent:0 animated:animated];
            {
                //<<<<
                __block NSInteger row = 0;
                //>>>>
                NSString *string = [NSString stringWithFormat:@"%ld", components.month];
                if ([string integerValue] <= self.monthList.count) {
                    row = [self.monthList indexOfObject:string];
                }
                //<<<<
                else if (self.monthList.count > 0){
                    [self.monthList enumerateObjectsUsingBlock:^(NSString *monthNum, NSUInteger idx, BOOL * _Nonnull stop) {
                        if ([monthNum isEqualToString:string ]) {
                            row = idx;
                            *stop = YES;
                        }
                    }];
                }
                //>>>>
                [self.pickerView selectRow:row inComponent:1 animated:animated];
            }
        }

加了个遍历去获取选中的月份在monthList中的index

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.