agiapp / BRPickerView

BRPickerView 封装的是iOS中常用的选择器组件,主要包括:日期选择器(支持年月日、年月等15种日期样式选择,支持设置星期、至今等)、地址选择器(支持省市区、省市、省三种地区选择)、自定义字符串选择器(支持单列、多列、二级联动、三级联动选择)。支持自定义主题样式,适配深色模式,支持将选择器组件添加到指定容器视图。
https://github.com/agiapp/BRPickerView
MIT License
2.55k stars 442 forks source link

您好,我们项目有这样的需求能否用您这个第三方来实现呢 #105

Closed maxiaoqing closed 3 months ago

maxiaoqing commented 4 years ago

需求图片如下:图片地址: https://user-images.githubusercontent.com/23112654/70209277-cd815980-176a-11ea-81b5-f35549c7623e.png

截屏2019-12-05下午2 22 14

在pickerview上面有个标识栏年月日,月和日旁边有个按钮,用来控制是否显示月和日一列的数据。在一个窗口上可以实时刷新窗口数据,比如我想显示年月日或者显示年月或者年。BRDatePickerMode这个属性如果在BRDatePickerView实例化后可不可以更改。

agiapp commented 4 years ago

可以实现的,这种需求是不需要更改BRDatePickerMode(更改的话【年】列的数据会居中,不能与你上面的标识栏年对齐)。可以新增两个属性:isHiddenMonth、isHiddenDay。在方法 getMonthTextgetDayText 中控制月日的显示,如果不显示就 return @"",再 [self.pickerView reloadAllComponents]; 刷新一下页面,最后再控制一下回调结果就行。

maxiaoqing commented 4 years ago

您好,如果年月日都保留显示的情况下,让月和日下面的数据不可滑动和不可选择。该怎么做呢?因为更改的话【年】列的数据会居中,不能与上面的标识栏年对齐,有些不好看。还有个问题,我这个页面是不是应该用这个方法处理- (void)addPickerToView:(UIView *)view;自定义的情况下,上面的取消和完成按钮是默认带出么,还是需要我自己去实现?谢谢

agiapp commented 4 years ago

使用 addPickerToView: 这个方法,只是把滚轮选择器添加到自己的自定义视图上,不包含取消和完成按钮。基于你上面的需求,还有个最省事的方法,你可以创建一个UIView视图,把月和日所在列盖住,遮盖视图设置为白色即是隐藏列,设置为透明色即不能响应后面的滚动事件。你可以通过点击标记栏月和日旁边的按钮来更改遮盖视图的宽度。另外回调结果截取满足需求的结果值就行。

maxiaoqing commented 4 years ago

您好,感谢您提供的思路,我尝试用自定义视图去做这个功能,目前pickerview会把取消和OK那一行盖住,它下面有一段空白,应该是frame设置问题。该如何解决呢,可以方便给我举个例子么。谢谢

agiapp commented 4 years ago

使用 - (void)addPickerToView:(UIView *)view; 方法,需要自己去自定义标题栏(包括取消和确定)

agiapp commented 4 years ago

你修改过程有什么问题吗,如果有问题我也可以按您项目原需求单独封装一个组件

maxiaoqing commented 4 years ago

好的,那麻烦您帮我单独封装一个组件吧,我这边按照你说的没能实现出来。谢谢了。

agiapp commented 4 years ago

好的,你把详细需求再说一下,还有几个细节: 1、默认显示状态是什么。如:默认是否显示【年月日】,【月】和【日】后面的 [不限] 按钮是否为蓝色 2、点击【月】后面的 [不限] 按钮:【月】和【日】后面的 [不限] 按钮 是否都变为灰色,且 清空 【月】和【日】下面数据的显示。 3、点击【日】后面的 [不限] 按钮:【日】后面的 [不限] 按钮 是否变为灰色,且 清空【日】下面数据的显示。

你确定一下,详细逻辑是不是这样的?

maxiaoqing commented 4 years ago

对,逻辑是这样的。谢谢您了。您给我提供的两个方案,您用哪种?

agiapp commented 4 years ago

我用第一种方式封装吧,这种方式比较符合原需求,写好了我就发你

maxiaoqing commented 4 years ago

好的

agiapp commented 4 years ago

写好了,我直接把代码提交到这个仓库了,就放在Demo里面,叫 BRMutableDatePickerView (可变的日期选择器)

maxiaoqing commented 4 years ago

好的,谢谢您

agiapp commented 4 years ago

你可以去测试看有没有什么问题,有问题的话我明天再一起给你修改

maxiaoqing commented 4 years ago

OK

agiapp commented 4 years ago

我已经提交上去了,你测试看看

maxiaoqing commented 4 years ago

明天再帮我改吧,都不好意思了。还有一种情况,不选择月的情况下,点击确定后是2019.再次打开选择器,应该只显示年才对,不应该显示年月日,并且月和日按钮的颜色应该是灰色。或者不选择日的情况下,点击确定是2019-5,再次打开选择器,应该只显示年和月,不应该有日的数据,并且日按钮的颜色应该是灰色。

agiapp commented 4 years ago

这个是需要记录一下按钮的选择状态,下次打开的时候要把前一次的状态传进去即可。

BRMutableDatePickerView *datePickerView = [[BRMutableDatePickerView alloc]init];
datePickerView.selectDate = self.selectDate;
datePickerView.hiddenDateUnit = YES;
datePickerView.hiddenMonth = self.hiddenMonth;
datePickerView.hiddenDay = self.hiddenDay;
datePickerView.resultBlock = ^(NSDate *selectDate, NSString *selectValue, BOOL hiddenMonth, BOOL hiddenDay) {
    NSLog(@"选择的时间:%@", selectValue);
    self.titleLabel.text = selectValue;
    self.selectDate = selectDate;
    self.hiddenMonth = hiddenMonth;
    self.hiddenDay = hiddenDay;
};
[datePickerView show];
agiapp commented 4 years ago

都已经优化掉了,这个需求也是第一次做,我也是凭感觉做的,细节上可能有一些疏漏,你明天可以多测测,看看还有没有什么问题。

maxiaoqing commented 4 years ago

非常感谢,测试没有问题了。请教您一个问题,APP换肤功能如何实现比较好?有没有好的建议或者第三方推荐一个。

agiapp commented 4 years ago

这种例子,GitHub上很多的,也可以参看一下:https://github.com/draveness/DKNightVersion

honeybeeSwinging commented 2 years ago

认真看完作者和用户的沟通记录,深感作者大佬是个好人和热心肠的人,赞赞赞👍

maxiaoqing commented 3 months ago

这是来自QQ邮箱的假期自动回复邮件。   您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。