最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS實(shí)現(xiàn)自定義起始時(shí)間選擇器視圖

 更新時(shí)間:2017年06月20日 09:24:05   作者:smile麗語(yǔ)  
本篇文章主要介紹了iOS實(shí)現(xiàn)自定義起始時(shí)間選擇器視圖,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

隨著界面的整體效果的各種展現(xiàn), 起始時(shí)間選擇器的展現(xiàn)也需求突出!

最近項(xiàng)目中發(fā)現(xiàn)時(shí)間選擇器使用處還挺多, 數(shù)了數(shù)原型圖發(fā)現(xiàn)有6處. 便決定自定義時(shí)間選擇器視圖寫(xiě)個(gè) Demo, 封裝好在所需控制器里直接調(diào)用!

主要功能:

調(diào)起時(shí)間選擇器, 傳值(起始時(shí)間/截止時(shí)間), 兩者時(shí)間均要合理, 不能超過(guò)未來(lái)時(shí)間, 并且起始時(shí)間不能大于截止時(shí)間. 點(diǎn)擊取消或空白處收起時(shí)間選擇器.

如果需要可以根據(jù)自己的需求來(lái)修改界面, 效果如下:

主要步驟:

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

第一步. 創(chuàng)建時(shí)間選擇器Picker 且確認(rèn)取消按鈕實(shí)現(xiàn)功能邏輯

自定義ZLDatePickerView 文件:

@property (nonatomic, assign) id<ZLDatePickerViewDelegate> deleagte;
// 最初/小時(shí)間(一般為左邊值)
@property (nonatomic, strong) NSDate *minimumDate;
// 截止時(shí)間(一般為右邊值)
@property (nonatomic, strong) NSDate *maximumDate;
// 當(dāng)前選擇時(shí)間
@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 展現(xiàn)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];
}

起始時(shí)間/截止時(shí)間設(shè)值:

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

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

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

確認(rèn)/取消按鈕實(shí)現(xiàn)功能邏輯:

- (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];
  }
}

第二步. 創(chuàng)建展示時(shí)間菜單的按鈕視圖 (按鈕: 圖片在右,標(biāo)題在左的按鈕)

這個(gè)可以根據(jù)需求來(lái),有些不需要這個(gè)按鈕圖片在右邊的,則沒(méi)必要添加.

自定義ZLOppositeButton文件:

- (void)layoutSubviews {
  [super layoutSubviews];

  CGFloat margin = 10;

  // 替換 title 和 image 的位置
  // 圖片在右,標(biāo)題在左
  // 由于 button 內(nèi)部的尺寸是自適應(yīng)的.調(diào)整尺寸即可
  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;
}

接著利用上面的按鈕創(chuàng)建一個(gè)展示時(shí)間菜單的按鈕視圖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"];
}

其中我們上傳時(shí)間一般都是字符串而不是時(shí)間戳, 則需要進(jìn)行轉(zhuǎn)換

#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];
}

第三步. 創(chuàng)建時(shí)間選擇器視圖 且 起始時(shí)間/截止時(shí)間邏輯判斷

利用第二步自定義的按鈕來(lái)自定義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>

/**
 * 時(shí)間選擇器視圖
 *
 * @param beginTime      起始時(shí)間/開(kāi)始時(shí)間
 * @param endTime       終止時(shí)間按/結(jié)束時(shí)間
 *
 */
- (void)timeView:(ZLTimeView *)timeView seletedDateBegin:(NSString *)beginTime end:(NSString *)endTime;

@end

使用第一步創(chuàng)建的時(shí)間選擇器Picker, 來(lái)進(jìn)行起始時(shí)間/截止時(shí)間邏輯判斷

#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];
  }
}

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

在所需控制器里創(chuàng)建起始時(shí)間選擇器控件

#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;
}

  // 起始時(shí)間選擇器控件
  [self.view addSubview:self.timeView];

使用代理:

<ZLTimeViewDelegate>
#pragma mark - ZLTimeViewDelegate

- (void)timeView:(ZLTimeView *)timeView seletedDateBegin:(NSString *)beginTime end:(NSString *)endTime {
  // TODO: 進(jìn)行上傳時(shí)間段
}

當(dāng)多出使用時(shí),用起來(lái)是不是很方便, 這時(shí)候測(cè)試看下效果:

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

希望本文所述對(duì)你有所幫助,iOS實(shí)現(xiàn)自定義起始時(shí)間選擇器視圖就給大家介紹到這里了。希望大家繼續(xù)關(guān)注我們的網(wǎng)站!想要學(xué)習(xí)iOS可以繼續(xù)關(guān)注本站。

相關(guān)文章

  • iOS中定位當(dāng)前位置坐標(biāo)及轉(zhuǎn)換為火星坐標(biāo)的方法

    iOS中定位當(dāng)前位置坐標(biāo)及轉(zhuǎn)換為火星坐標(biāo)的方法

    這篇文章主要介紹了iOS中獲取當(dāng)前位置坐標(biāo)及轉(zhuǎn)換為火星坐標(biāo)的方法,這里的火星坐標(biāo)指的是我國(guó)專(zhuān)門(mén)研制的一種加密的坐標(biāo)系統(tǒng)...需要的朋友可以參考下
    2016-02-02
  • IOS實(shí)現(xiàn)圖片輪播無(wú)限循環(huán)效果

    IOS實(shí)現(xiàn)圖片輪播無(wú)限循環(huán)效果

    這篇文章主要為大家詳細(xì)介紹了IOS實(shí)現(xiàn)圖片輪播無(wú)限循環(huán)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • iOS實(shí)現(xiàn)圖片壓縮的兩種方法及圖片壓縮上傳功能

    iOS實(shí)現(xiàn)圖片壓縮的兩種方法及圖片壓縮上傳功能

    ios 圖片壓縮有兩種方法,分別是,壓縮圖片質(zhì)量(Quality),壓縮圖片尺寸(Size),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下
    2017-01-01
  • UIWebView控件中字體大小和字體樣式的修改

    UIWebView控件中字體大小和字體樣式的修改

    本文主要介紹了UIWebView控件中字體大小和字體樣式的修改,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • IOS中的webView加載HTML

    IOS中的webView加載HTML

    在日常開(kāi)發(fā)中,我們?yōu)榱诵蕰?huì)用到很多很多的WebView,比如在做某個(gè)明細(xì)頁(yè)面的時(shí)候我們返回給你的可能是一個(gè)html字符串,我們就需要將當(dāng)前字符串展示到webView上面,所以我們對(duì)HTML標(biāo)簽需要有一定的認(rèn)識(shí),下面我們來(lái)一起用html標(biāo)簽和JS寫(xiě)一個(gè)打地鼠游戲
    2016-02-02
  • iOS動(dòng)態(tài)調(diào)整UILabel高度的幾種方法

    iOS動(dòng)態(tài)調(diào)整UILabel高度的幾種方法

    在iOS編程中UILabel是一個(gè)常用的控件,下面這篇文章主要給大家介紹了關(guān)于iOS動(dòng)態(tài)調(diào)整UILabel高度的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • iOS中json解析出現(xiàn)的null,nil,NSNumber的解決辦法

    iOS中json解析出現(xiàn)的null,nil,NSNumber的解決辦法

    在iOS開(kāi)發(fā)過(guò)程中經(jīng)常需要與服務(wù)器進(jìn)行數(shù)據(jù)通訊,Json就是一種常用的高效簡(jiǎn)潔的數(shù)據(jù)格式,通過(guò)本文給大家介紹iOS中json解析出現(xiàn)的null,nil,NSNumber的解決辦法,感興趣的朋友參考下
    2016-01-01
  • 詳解iOS多線(xiàn)程GCD的使用

    詳解iOS多線(xiàn)程GCD的使用

    Grand Central Dispatch (GCD)是Apple開(kāi)發(fā)的一個(gè)多核編程的解決方法,本文給大家詳細(xì)介紹IOS中GCD的使用,需要的朋友參考下
    2016-03-03
  • iOS如何實(shí)現(xiàn)強(qiáng)制轉(zhuǎn)屏、強(qiáng)制橫屏和強(qiáng)制豎屏的實(shí)例代碼

    iOS如何實(shí)現(xiàn)強(qiáng)制轉(zhuǎn)屏、強(qiáng)制橫屏和強(qiáng)制豎屏的實(shí)例代碼

    本篇文章主要介紹了iOS如何實(shí)現(xiàn)強(qiáng)制轉(zhuǎn)屏、強(qiáng)制橫屏和強(qiáng)制豎屏的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • iOS使用核心動(dòng)畫(huà)和粒子發(fā)射器實(shí)現(xiàn)點(diǎn)贊按鈕的方法

    iOS使用核心動(dòng)畫(huà)和粒子發(fā)射器實(shí)現(xiàn)點(diǎn)贊按鈕的方法

    這篇文章主要給大家介紹了iOS如何使用核心動(dòng)畫(huà)和粒子發(fā)射器實(shí)現(xiàn)點(diǎn)贊按鈕的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒,有需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2016-12-12

最新評(píng)論

新疆| 雅安市| 左云县| 蓝山县| 陇西县| 文水县| 九龙城区| 鲜城| 平湖市| 社会| 敖汉旗| 长子县| 二手房| 石渠县| 澄城县| 禄劝| 宜章县| 普宁市| 汝州市| 长岛县| 临西县| 于田县| 罗平县| 衡山县| 德兴市| 乌拉特中旗| 张掖市| 隆子县| 松原市| 沿河| 梓潼县| 常宁市| 泗阳县| 布尔津县| 长沙市| 丽水市| 横山县| 长宁区| 邢台县| 达拉特旗| 汕尾市|