ios 时间选择器月份设置中文_iOS 自定义日历(日期选择)控件

日历控件.pngiOS 自定义日历(日期选择)控件[TOC]前言作为一个程序员,当你开发的app越来越多的时候,或者当你浏览一些app的时候,你会发现很多模块实现的功能是一样的。而作为开发者而言,就更加注意这些功能一样的东西了,因为你会发现这个项目中的某个模块完全可以使用以前做项目时封装的一些功能模块,这样你会无比的开心。然后去寻找以前封装的东西,简单的导入和引用就解决了一个功能模块。日期选择器可...
摘要由CSDN通过智能技术生成

日历控件.png

iOS 自定义日历(日期选择)控件

[TOC]

前言

作为一个程序员,当你开发的app越来越多的时候,或者当你浏览一些app的时候,你会发现很多模块实现的功能是一样的。而作为开发者而言,就更加注意这些功能一样的东西了,因为你会发现这个项目中的某个模块完全可以使用以前做项目时封装的一些功能模块,这样你会无比的开心。然后去寻找以前封装的东西,简单的导入和引用就解决了一个功能模块。

日期选择器可以说是一个经常用到的控件了,只是形式各不相同而已。所以为了满足项目的需求我决定自己研究一下日历控件的实现方法。

实现 (工程代码见文末链接)

老规矩,先上图

[图片上传失败...(image-337b88-1536583028680)]

工程目录结构

[图片上传失败...(image-52292a-1536583028681)]

EngineeringDocuments:工程头文件,pch,类目,base文件等。

controller:控制器(YZXSelectDateViewController),日报,月报,年报,自定义等视图,都是添加到该控制器的view上。

Model:用于缓存和处理数据。

YZXDateModel:记录年份信息,通过设置的开始日期和结束日期计算两日期之间所有的年份和月份数组。

YZXMonthModel:记录月份信息,主要用于YZXDateModel中。

YZXCalendarModel:记录月份的具体信息。(其实应该放在YZXMonthModel中,可能当时脑子抽筋了...)

Views:各种view,用于初始化完整的日历控件。

YZXCalendarHelper:整个工程的manager(应该放到EngineeringDocuments目录下的😅,Demo中已修改),可以设置一些基本信息,如:日历的开始时间和结束时间,一些常用的NSDateFormatter等。

YZXWeekMenuView:日报中UICollectionView-Section展示星期。

YZXDaysMenuView:日报中展示具体的日期。

YZXCalendarView:YZXWeekMenuView和YZXDaysMenuView,组成完整的日历。

YZXCalendarDelegate:选择日期后的回调``代理。

DateSelection:月报,年报及其对应的其他视图。

collectionView:日历控件主要用UICollectionView来实现界面的搭建的,所以该文件夹中都是一些cell,header等。

下面将详细介绍一下主要文件的作用

Manager

YZXCalendarHelper(manager)

YZXCalendarHelper中主要提供了一下日历控件相关的设置,比如开始日期和结束日期,一些枚举,还有一些常用的NSDateFormatter和日期的比较方法等,方便设置日历控件,并减少重复代码。具体的实现方法,将在使用到的时候介绍。

日报和自定义日期

YZXWeekMenuView

初始化一个NSDateFormatter,使时区和区域语言和NSCalendar相同,然后通过NSDateFormatter的实例方法veryShortWeekdaySymbols获取到周符号(S,M,T,W...),然后遍历布局,将周末字体设置为红色。

- (NSDateFormatter *)createDateFormatter

{

NSDateFormatter *dateFormatter = [NSDateFormatter new];

dateFormatter.timeZone = self.calendarHelper.calendar.timeZone;

dateFormatter.locale = self.calendarHelper.calendar.locale;

return dateFormatter;

}

NSDateFormatter *formatter = [self createDateFormatter];

NSMutableArray *days = [[formatter veryShortWeekdaySymbols] mutableCopy];

[days enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

UILabel *weekdayLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.bounds.size.width / 7.f * idx, 0, self.bounds.size.width / 7.f, self.bounds.size.height - lineView_height)];

weekdayLabel.text = obj;

weekdayLabel.font = [UIFont systemFontOfSize:10.0];

weekdayLabel.textAlignment = NSTextAlignmentCenter;

weekdayLabel.textColor = CustomBlackColor;

if (idx == 0 || idx == 6) {

weekdayLabel.textColor = CustomRedColor;

}

[self addSubview:weekdayLabel];

}];

YZXDaysMenuView

YZXDaysMenuView.h

/**

自定义初始化

@param frame frame

@param startDateString 日历的开始时间(日期格式:yyyy年MM月dd日)

@param endDateString 日历的结束时间(日期格式:yyyy年MM月dd日)

@return self

*/

- (instancetype)initWithFrame:(CGRect)frame

withStartDateString:(NSString *)startDateString

endDateString:(NSString *)endDateString;

//点击回调代理

@property (nonatomic, weak) id delegate;

//日历单选

@property (nonatomic, copy) NSString *startDate;

//判断是否为自定义选择(选择日期段)

@property (nonato

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用SwiftUI自定义iOS分段件可以通过以下步骤实现: 1. 创建一个新的SwiftUI View,命名为SegmentedControl。 2. 在SegmentedControl中定义一个枚举类型,用于表示分段件中的选项。 3. 在SegmentedControl中定义一个@Binding属性用于绑定选中的选项。 4. 在SegmentedControl中使用ForEach循环遍历所有的选项,并将它们显示在分段件中。 5. 在ForEach循环中,使用Button显示每一个选项,并在按钮的action中更新选中的选项。 6. 为分段件添加样式,例如设置选中的选项的背景色和字体颜色等。 下面是一个简单的示例代码: ```swift enum SegmentedOption: String, CaseIterable { case option1 case option2 case option3 } struct SegmentedControl: View { @Binding var selectedOption: SegmentedOption var body: some View { HStack { ForEach(SegmentedOption.allCases, id: \.self) { option in Button(action: { self.selectedOption = option }) { Text(option.rawValue) .foregroundColor(self.selectedOption == option ? .white : .black) .padding(.horizontal, 20) .padding(.vertical, 10) .background(self.selectedOption == option ? Color.blue : Color.gray) .cornerRadius(10) } } } } } ``` 在使用时,只需要将SegmentedControl添加到需要显示的View中,并将选中的选项绑定到某个属性即可。例如: ```swift struct ContentView: View { @State private var selectedOption: SegmentedOption = .option1 var body: some View { VStack { SegmentedControl(selectedOption: $selectedOption) Text("Selected option: \(selectedOption.rawValue)") } } } ``` 这样就可以在界面上显示一个自定义iOS分段件了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值