亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS實現自定義起始時間選擇器視圖

2020-07-26 02:47:23
字體:
來源:轉載
供稿:網友

隨著界面的整體效果的各種展現, 起始時間選擇器的展現也需求突出!

最近項目中發現時間選擇器使用處還挺多, 數了數原型圖發現有6處. 便決定自定義時間選擇器視圖寫個 Demo, 封裝好在所需控制器里直接調用!

主要功能:

調起時間選擇器, 傳值(起始時間/截止時間), 兩者時間均要合理, 不能超過未來時間, 并且起始時間不能大于截止時間. 點擊取消或空白處收起時間選擇器.

如果需要可以根據自己的需求來修改界面, 效果如下:

主要步驟:

  1. 創建時間選擇器Picker 且確認取消按鈕實現功能邏輯
  2. 創建展示時間菜單的按鈕視圖 (按鈕: 圖片在右,標題在左的按鈕)
  3. 創建時間選擇器視圖 且 起始時間/截止時間邏輯判斷
  4. 使用代理傳值起始時間/截止時間(時間串轉換)

第一步. 創建時間選擇器Picker 且確認取消按鈕實現功能邏輯

自定義ZLDatePickerView 文件:

@property (nonatomic, assign) id<ZLDatePickerViewDelegate> deleagte;// 最初/小時間(一般為左邊值)@property (nonatomic, strong) NSDate *minimumDate;// 截止時間(一般為右邊值)@property (nonatomic, strong) NSDate *maximumDate;// 當前選擇時間@property (nonatomic, strong) NSDate *date;+ (instancetype)datePickerView;- (void)showFrom:(UIView *)view;

使用代理傳值:

@protocol ZLDatePickerViewDelegate <NSObject>- (void)datePickerView:(ZLDatePickerView *)pickerView backTimeString:(NSString *)string To:(UIView *)view;@end

使用 xib 展現datePicker:

+ (instancetype)datePickerView {  ZLDatePickerView *picker = [[NSBundle mainBundle] loadNibNamed:@"ZLDatePickerView" owner:nil options:nil].lastObject;  picker.frame = CGRectMake(0, UI_View_Height - 250, UI_View_Width, 250);  picker.maximumDate = [NSDate date];  return picker;}- (void)showFrom:(UIView *)view {  UIView *bgView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];  bgView.backgroundColor = [UIColor lightGrayColor];  bgView.alpha = 0.5;  UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];  [bgView addGestureRecognizer:tap];  self.fromView = view;  self.bgView = bgView;  [[UIApplication sharedApplication].keyWindow addSubview:self.bgView];  [[UIApplication sharedApplication].keyWindow addSubview:self];}

起始時間/截止時間設值:

- (void)setMinimumDate:(NSDate *)minimumDate {  self.datePicker.minimumDate = minimumDate;}- (void)setMaximumDate:(NSDate *)maximumDate {  self.datePicker.maximumDate = maximumDate;}- (void)setDate:(NSDate *)date {  self.datePicker.date = date;}

確認/取消按鈕實現功能邏輯:

- (IBAction)cancel:(id)sender {  [self dismiss];}- (IBAction)makeSure:(id)sender {  [self dismiss];  NSDate *date = self.datePicker.date;  if ([self.deleagte respondsToSelector:@selector(datePickerView:backTimeString:To:)]) {    [self.deleagte datePickerView:self backTimeString:[self fomatterDate:date] To:self.fromView];  }}

第二步. 創建展示時間菜單的按鈕視圖 (按鈕: 圖片在右,標題在左的按鈕)

這個可以根據需求來,有些不需要這個按鈕圖片在右邊的,則沒必要添加.

自定義ZLOppositeButton文件:

- (void)layoutSubviews {  [super layoutSubviews];  CGFloat margin = 10;  // 替換 title 和 image 的位置  // 圖片在右,標題在左  // 由于 button 內部的尺寸是自適應的.調整尺寸即可  CGFloat maxWidth = self.width - self.imageView.width - margin;  if (self.titleLabel.width >= maxWidth) {    self.titleLabel.width = maxWidth;  }  CGFloat totalWidth = self.titleLabel.width + self.imageView.width;  self.titleLabel.x = (self.width - totalWidth - margin) * 0.5;  self.imageView.x = CGRectGetMaxX(self.titleLabel.frame) + margin;}

接著利用上面的按鈕創建一個展示時間菜單的按鈕視圖ZLTimeBtn文件:

- (void)setup {  self.backgroundColor = [UIColor clearColor];  [self setImage:[UIImage imageNamed:@"xiangxiadianji"] forState:UIControlStateNormal];  [self setTitle:[self timeStringDefault] forState:UIControlStateNormal];  [self setTitleColor:ZLColor(102, 102, 102) forState:UIControlStateNormal];  self.titleLabel.font = [UIFont systemFontOfSize:14];}- (NSString *)timeStringDefault {  NSDate *date = [NSDate date];  return [date timeFormat:@"yyyy-MM-dd"];}

其中我們上傳時間一般都是字符串而不是時間戳, 則需要進行轉換

#import "NSDate+ZLDateTimeStr.h"- (NSString *)timeFormat:(NSString *)dateFormat {  NSDateFormatter *formatter = [[NSDateFormatter alloc] init];  [formatter setDateStyle:NSDateFormatterMediumStyle];  [formatter setTimeStyle:NSDateFormatterShortStyle];  [formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];  [formatter setDateFormat:dateFormat];  return [formatter stringFromDate:self];}

第三步. 創建時間選擇器視圖 且 起始時間/截止時間邏輯判斷

利用第二步自定義的按鈕來自定義ZLTimeView文件:

@property (nonatomic, weak) ZLTimeBtn *beginTimeBtn;@property (nonatomic, weak) UILabel *label;@property (nonatomic, weak) ZLTimeBtn *endTimeBtn;
- (void)layoutSubviews {  [super layoutSubviews];  self.beginTimeBtn.frame = CGRectMake(0, 0, self.width / 5.0 * 2, self.height);  self.label.frame = CGRectMake(CGRectGetMaxX(self.beginTimeBtn.frame), 0, self.width / 5, self.height);  self.endTimeBtn.frame = CGRectMake(CGRectGetMaxX(self.label.frame),0 , self.width / 5.0 * 2, self.height);  self.line.frame = CGRectMake(0, self.height - 1, self.width, 1);}

使用代理:

@protocol ZLTimeViewDelegate <NSObject>/** * 時間選擇器視圖 * * @param beginTime      起始時間/開始時間 * @param endTime       終止時間按/結束時間 * */- (void)timeView:(ZLTimeView *)timeView seletedDateBegin:(NSString *)beginTime end:(NSString *)endTime;@end

使用第一步創建的時間選擇器Picker, 來進行起始時間/截止時間邏輯判斷

#pragma mark - ZLDatePickerViewDelegate- (void)beginTimeBtnClick:(UIButton *)btn {  ZLDatePickerView *beginTimePV = [ZLDatePickerView datePickerView];  beginTimePV.date = [NSDate stringChangeTimeFormat:@"yyyy-MM-dd" string:btn.titleLabel.text];  if (self.maxDate) {    beginTimePV.maximumDate = self.maxDate;  }  beginTimePV.deleagte = self;  [beginTimePV showFrom:btn];}- (void)endTimeBtnClick:(UIButton *)btn {  ZLDatePickerView *endTimePV = [ZLDatePickerView datePickerView];  endTimePV.date = [NSDate stringChangeTimeFormat:@"yyyy-MM-dd" string:btn.titleLabel.text];  if (self.minDate) {    endTimePV.minimumDate = self.minDate;  }  endTimePV.deleagte = self;  [endTimePV showFrom:btn];}- (void)datePickerView:(ZLDatePickerView *)pickerView backTimeString:(NSString *)string To:(UIView *)view {  UIButton *btn = (UIButton *)view;  if (btn == self.beginTimeBtn) {    self.minDate = [NSDate stringChangeTimeFormat:@"yyyy-MM-dd" string:string];  }  if (btn == self.endTimeBtn) {    self.maxDate = [NSDate stringChangeTimeFormat:@"yyyy-MM-dd" string:string];  }  [btn setTitle:string forState:UIControlStateNormal];  if ([self.delegate respondsToSelector:@selector(timeView:seletedDateBegin:end:)]) {    [self.delegate timeView:self seletedDateBegin:self.beginTimeBtn.titleLabel.text end:self.endTimeBtn.titleLabel.text];  }}

第四步. 使用代理傳值起始時間/截止時間

在所需控制器里創建起始時間選擇器控件

#import "ZLTimeView.h"
@property (nonatomic, copy) NSString *begintime;@property (nonatomic, copy) NSString *endtime;@property (nonatomic, weak) UIButton *beginTimeBtn;@property (nonatomic, weak) UIButton *endTimeBtn;@property (nonatomic, strong) ZLTimeView *timeView;
#pragma mark - 懶加載- (ZLTimeView *)timeView {  if (!_timeView) {    ZLTimeView *timeView = [[ZLTimeView alloc] initWithFrame:CGRectMake(0, 100, UI_View_Width, 50)];    timeView.backgroundColor = [UIColor greenColor];    timeView.delegate = self;    _timeView = timeView;  }  return _timeView;}
  // 起始時間選擇器控件  [self.view addSubview:self.timeView];

使用代理:

<ZLTimeViewDelegate>
#pragma mark - ZLTimeViewDelegate- (void)timeView:(ZLTimeView *)timeView seletedDateBegin:(NSString *)beginTime end:(NSString *)endTime {  // TODO: 進行上傳時間段}

當多出使用時,用起來是不是很方便, 這時候測試看下效果:

以上是部分代碼, 如果需要 Demo 

希望本文所述對你有所幫助,iOS實現自定義起始時間選擇器視圖就給大家介紹到這里了。希望大家繼續關注我們的網站!想要學習iOS可以繼續關注本站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品在线观看www| 亚洲一区二区三区乱码aⅴ蜜桃女| 2021国产精品视频| 亚洲欧美综合另类中字| 亚洲色图17p| 国产精品久久久亚洲| 欧美高清视频在线观看| 日产精品久久久一区二区福利| 伊人亚洲福利一区二区三区| 亚洲欧美日韩国产精品| 亚洲国产精品成人va在线观看| 亚洲精品女av网站| 91在线免费视频| 国产一级揄自揄精品视频| 亚洲成av人乱码色午夜| 精品久久香蕉国产线看观看gif| 欧美日韩在线观看视频| 亚洲精品国产suv| 久久亚洲精品中文字幕冲田杏梨| 亚洲国模精品私拍| 国产999视频| 国产日韩欧美在线视频观看| 国产一区二区三区欧美| 不卡av电影院| 欧美一级片在线播放| 久久精品国产成人| 成人免费视频xnxx.com| 欧美激情一级精品国产| 欧美色图在线视频| 日韩av片永久免费网站| 国产午夜精品美女视频明星a级| 久久精品国产2020观看福利| 欧美激情视频播放| 亚洲人成网站在线播| 久久久999精品视频| 欧美日韩亚洲精品内裤| 色综合久久精品亚洲国产| 亚洲女人天堂成人av在线| 狠狠躁夜夜躁久久躁别揉| 日韩视频―中文字幕| 精品成人国产在线观看男人呻吟| 欧美激情a∨在线视频播放| 日韩精品丝袜在线| 国产精品黄页免费高清在线观看| 国产91在线高潮白浆在线观看| 久久天天躁狠狠躁老女人| 亚洲天堂男人天堂| 国产一区二区三区在线免费观看| 国产一区二区三区网站| 亚洲人成77777在线观看网| 久久久国产一区二区三区| 久久久久久国产三级电影| 国产国产精品人在线视| 日韩麻豆第一页| 国产精品一区二区女厕厕| 精品视频在线播放色网色视频| 亚洲国产精品免费| 日韩一区二区三区国产| 亚洲精品动漫100p| 亚洲第一国产精品| 国产亚洲欧美日韩精品| 欧美午夜激情视频| 欧美激情国产精品| 精品久久香蕉国产线看观看亚洲| 亚洲精品免费在线视频| 国产精品入口夜色视频大尺度| 欧美性猛交xxxx乱大交蜜桃| 久久影院中文字幕| 国产精品久久久久久久天堂| 国外视频精品毛片| 成人情趣片在线观看免费| 国产香蕉一区二区三区在线视频| 欧美福利视频在线| 国产一区二区动漫| 亚洲精品综合精品自拍| 狠狠躁夜夜躁久久躁别揉| 国外成人免费在线播放| 久久韩国免费视频| 在线观看91久久久久久| 中文一区二区视频| 国产欧美日韩专区发布| 久久久精品电影| 色噜噜狠狠狠综合曰曰曰88av| 美女少妇精品视频| 国产精品久久久久久久久男| 欧美黑人一级爽快片淫片高清| 日韩欧美精品中文字幕| 欧美香蕉大胸在线视频观看| 中文日韩在线观看| 国产综合福利在线| 亚洲美女在线视频| 日产日韩在线亚洲欧美| 色哟哟网站入口亚洲精品| 欧美午夜激情在线| 国产日韩一区在线| 日韩美女福利视频| 亚洲成人免费网站| 日本欧美中文字幕| 欧美高跟鞋交xxxxxhd| 日韩精品免费观看| 国产精品第100页| 国产精品久久久久久久久久久不卡| 国产精品视频xxx| 亚洲精品久久久久久久久久久| 久久久久成人精品| 91人人爽人人爽人人精88v| 麻豆乱码国产一区二区三区| 欧美一性一乱一交一视频| 国产欧美精品久久久| 欧美性xxxxxxxxx| 91精品久久久久久久久久另类| 日韩av在线导航| 亚洲理论在线a中文字幕| 91国产在线精品| 成人字幕网zmw| 成人在线激情视频| 亚洲淫片在线视频| 5252色成人免费视频| 日韩精品视频免费专区在线播放| 欧美性猛交xxxxx水多| 国产精品亚洲网站| 亚洲自拍偷拍福利| 日韩成人av网址| 欧美激情国产高清| 亚洲一区二区三区成人在线视频精品| 日韩精品亚洲视频| 精品国产成人av| 欧美日韩中文在线| 国产a级全部精品| 日韩av片免费在线观看| 91免费在线视频网站| 日韩最新中文字幕电影免费看| 亚洲人免费视频| 欧美日韩国产精品| 7777精品久久久久久| 亚洲久久久久久久久久| 欧美激情在线狂野欧美精品| 26uuu亚洲伊人春色| 欧美性极品xxxx娇小| 亚洲精选在线观看| 亚洲精品成人久久电影| 日本久久久久亚洲中字幕| 亚洲精品欧美日韩| 欧美国产第一页| 97视频com| 精品性高朝久久久久久久| 91沈先生作品| 欧美激情精品久久久久久大尺度| 91老司机在线| 亚洲精品国产精品国自产在线| 97在线精品国自产拍中文| 国产日韩在线看| 成人网页在线免费观看| 亚洲欧美在线看| 久久久免费精品| 日韩欧美一区二区三区| 久久中文字幕在线视频| 正在播放国产一区| 亚洲色图综合久久| 伊人激情综合网| 成人a在线视频| 欧美激情亚洲激情| 国产亚洲一级高清| 亚洲尤物视频网|