《简单的自定义DropDatePicker》-- UIPopoverController 和 代理 以及 Block 实现。
最近做项目为了方便项目使用,自定义的空间 写的比较粗糙。欢迎大家批评指正。
以上为在项目中的实际应用
// DropDownDatePicker.h
// DropDownDatePickerDemo
//
// Created by HRP on 15/3/25.
// Copyright (c) 2015年 HRP. All rights reserved.
// #import <UIKit/UIKit.h>
typedef NS_ENUM(NSInteger, DropDownDatePickerMode)
{
DropDownDatePickerModeDate,
DropDownDatePickerModeTime
}; @interface DropDownDatePicker : UIView - (id)initWithFrame:(CGRect)frame dateMode:(DropDownDatePickerMode)mode; @property (nonatomic, copy) void(^dateChangeHandler)(NSDate *); @property (nonatomic, readonly) UILabel *titleLabel;
@property (nonatomic, readonly) UIBarButtonItem *confrimButton; @property (nonatomic,strong ) UIColor *dateTextColor; //Default is Blue
@property (nonatomic,strong ) UIFont *dateTextFont; //Default is 14.0 @property (nonatomic,strong ) NSDate *currentDate; //Default is [NSDate date] @property (nonatomic,retain ) NSDate *minimumDate; //Default is nil
@property (nonatomic,retain ) NSDate *maximumDate; //Default is nil @property (nonatomic,assign ) NSInteger minuteInterval; @end ===== 以下为DropDownDatePicker.m====== //
// DropDownDatePicker.m
// DropDownDatePickerDemo
//
// Created by HRP on 15/3/25.
// Copyright (c) 2015年 HRP. All rights reserved.
// #import "DropDownDatePicker.h" @protocol HRPDropDownDatePickerControllerDelegate <NSObject> @required - (void)datePickerControllerNeedDismiss;
- (void)datePickerControllerDateChanged:(NSDate *)newDate; @end @interface HRPDropDownDatePickerController : UIViewController - (id)initWithDatePickerMode:(DropDownDatePickerMode)mode; @property (nonatomic) UIPopoverController *popover; @property (nonatomic,readonly ) UILabel *titleLable;
@property (nonatomic,readonly ) UIBarButtonItem *confrimButton;
@property (nonatomic,readwrite) NSDate *currentDate; @property (nonatomic,weak)id<HRPDropDownDatePickerControllerDelegate> delegate; @property (nonatomic,retain) NSDate *minimumDate;
@property (nonatomic,retain) NSDate *maxmumDate;
@property (nonatomic) NSInteger minuteInterval; @end @implementation HRPDropDownDatePickerController
{
DropDownDatePickerMode _mode;
UIDatePicker *_picker;
NSDate *_lastDate;
} - (id)initWithDatePickerMode:(DropDownDatePickerMode)mode
{
if (self = [super init])
{
_mode = mode;
}
return self;
} - (void)viewDidLoad
{
_confrimButton = [[UIBarButtonItem alloc] initWithTitle:@"OK"
style:UIBarButtonItemStyleDone
target:self action:@selector(dismiss)]; self.navigationItem.rightBarButtonItem = _confrimButton; _titleLable = [[UILabel alloc] initWithFrame:CGRectMake(, , , )];
_titleLable.textColor = [UIColor blueColor];
_titleLable.font = [UIFont systemFontOfSize:];
self.navigationItem.titleView = _titleLable; _picker = [[UIDatePicker alloc] initWithFrame:CGRectMake(, , , - )];
_picker.datePickerMode = (_mode == DropDownDatePickerModeDate)?UIDatePickerModeDate:UIDatePickerModeTime;
[self.view addSubview:_picker];
} - (void)dismiss
{
_lastDate = self.currentDate; if (![self.currentDate isEqual:_lastDate])
{
if (_delegate) {
[_delegate datePickerControllerDateChanged:self.currentDate];
}
}
if (_delegate) {
[_delegate datePickerControllerNeedDismiss];
}
} - (void)setCurrentDate:(NSDate *)currentDate
{
[_picker setDate:currentDate animated:YES];
} - (void)setMaxmumDate:(NSDate *)maxmumDate
{
_picker.maximumDate = maxmumDate;
} - (void)setMinimumDate:(NSDate *)minimumDate
{
_picker.minimumDate = minimumDate;
} - (NSDate *)currentDate
{
return _picker.date;
} - (NSDate *)maxmumDate
{
return _picker.maximumDate;
} - (NSDate *)minimumDate
{
return _picker.minimumDate;
} - (void)setMinuteInterval:(NSInteger)minuteInterval
{
_picker.minuteInterval = minuteInterval;
} @end @interface DropDownDatePicker()
<HRPDropDownDatePickerControllerDelegate> @end @implementation DropDownDatePicker
{
UIButton *_button;
UIPopoverController *_popover;
HRPDropDownDatePickerController *_controller;
DropDownDatePickerMode _mode;
BOOL _needNotify;
} - (id)initWithFrame:(CGRect)frame
dateMode:(DropDownDatePickerMode)mode
{
self = [super initWithFrame:frame];
if (self) {
_needNotify = NO;
_mode = mode;
UIImage *arrowImage = [UIImage imageNamed:@"HZDropDownDatePickerDownArrow"];
CGRect imageViewFrame = CGRectMake(CGRectGetWidth(self.bounds) - arrowImage.size.width - , , arrowImage.size.width, arrowImage.size.height); UIImageView *imageView = [[UIImageView alloc] initWithFrame:imageViewFrame];
imageView.image = arrowImage;
imageView.backgroundColor = [UIColor redColor];
[self addSubview:imageView]; _button = [UIButton buttonWithType:UIButtonTypeSystem];
_button.contentVerticalAlignment = UIControlContentHorizontalAlignmentLeft;
_button.titleLabel.font = [UIFont systemFontOfSize:14.0];
_button.frame = self.bounds;
[_button setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; [_button addTarget:self
action:@selector(showPopover)
forControlEvents:UIControlEventTouchUpInside]; [self addSubview:_button]; _controller = [[HRPDropDownDatePickerController alloc] initWithDatePickerMode:mode];
_controller.delegate = self; UINavigationController *navi = [[UINavigationController alloc] initWithRootViewController:_controller];
if (!_popover) {
_popover = [[UIPopoverController alloc] initWithContentViewController:navi];
_popover.popoverContentSize = CGSizeMake(, );
}
else {
[_popover setContentViewController:navi];
}
self.currentDate = [NSDate date];
}
return self;
} - (UILabel *)titleLabel
{
return _controller.titleLable;
} - (NSDate *)currentDate{
return _controller.currentDate;
} - (void)setDateTextFont:(UIFont *)dateTextFont
{
_button.titleLabel.font = dateTextFont;
} - (UIFont *)dateTextFont
{
return _button.titleLabel.font;
} - (void)setDateTextColor:(UIColor *)dateTextColor
{
[_button setTitleColor:dateTextColor forState:UIControlStateNormal];
} - (UIColor *)dateTextColor
{
return [_button titleColorForState:UIControlStateNormal];
} - (void)setCurrentDate:(NSDate *)currentDate
{
_controller.currentDate = currentDate;
_needNotify = NO;
[self datePickerControllerDateChanged:currentDate];
} - (void)setMaximumDate:(NSDate *)maximumDate
{
_controller.maxmumDate = maximumDate;
} - (NSDate *)maximumDate
{
return _controller.minimumDate;
} - (void)setMinimumDate:(NSDate *)minimumDate
{
_controller.minimumDate = minimumDate;
} - (NSDate *)minimumDate
{
return _controller.minimumDate;
} - (NSInteger)minuteInterval{
return _controller.minuteInterval;
} - (void)setMinuteInterval:(NSInteger)minuteInterval{
_controller.minuteInterval = minuteInterval;
} -(UIBarButtonItem *)confrimButton{
return _controller.confrimButton;
} #pragma mark -
#pragma mark delegate - (void)datePickerControllerNeedDismiss
{
[_popover dismissPopoverAnimated:YES];
} - (void)datePickerControllerDateChanged:(NSDate *)newDate
{
NSString *dateString;
NSDateFormatter* formater = [[NSDateFormatter alloc] init];
if(_mode == DropDownDatePickerModeDate){
formater.dateFormat = @"yyyy年 MM月 dd日";
}
else if(_mode == DropDownDatePickerModeTime){
formater.dateFormat = @"hh: mm";
} dateString = [formater stringFromDate:newDate];
[_button setTitle:dateString forState:UIControlStateNormal]; if(_dateChangeHandler && _needNotify){
_dateChangeHandler(newDate);
}
_needNotify = YES;
} #pragma mark Private Methods - (void)showPopover
{
CGFloat x = self.bounds.size.width / ;
CGFloat y = self.bounds.size.height / ; [_popover presentPopoverFromRect:CGRectMake(x, y, , )
inView:_button
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
} @end
《简单的自定义DropDatePicker》-- UIPopoverController 和 代理 以及 Block 实现。的更多相关文章
- 最简单的自定义适配器adapter
下面是一个非常简单的自定义适配器的总体源码,从这个源码入门,就可以慢慢学会适配器了 适配器的作用: 完成数据和界面控件的绑定,把数据绑定到界面的现实控件条目上(对于listView,应该是listVi ...
- Android自定义view(一):制作一个最最最简单的自定义view
转载:https://blog.csdn.net/wsyizmao/article/details/78491422 浅谈安卓自定义view(一):制作一个最最最简单的自定义view 对于安卓程序员来 ...
- java:jsp: 一个简单的自定义标签 tld
java:jsp: 一个简单的自定义标签 tld 请注意,uri都是:http://www.tag.com/mytag,保持统一,要不然报错,不能访问 tld文件 <?xml version=& ...
- js/jq基础(日常整理记录)-4-一个简单的自定义tree插件
一.一个简单的自定义tree插件 上一篇是之前自定义的table插件,这一篇也是之前同期尝试做的一个tree插件. 话不多说,先看看长什么样子哈! 现在来看确实不好看,以后在优化吧! 数据源:ajax ...
- openresty开发系列2--nginx的简单安装,正向、反向代理及常用命令和信号控制介绍
openresty开发系列2--nginx的简单安装,正向.反向代理及常用命令和信号控制介绍 一.nginx的安装下载及编译安装1.Nginx下载:nginx-1.13.0.tar.gz,下载到:/u ...
- iOS 代理与block 逆向传值 学习
一般在项目中出现逆向传值的时候就需要用到代理.block 或者通知中心了.由于公司的项目底层封装的很好,所以项目做了三四个月就算碰到需要逆传的情况也不用自己处理.但是最近遇到了一个特别的情况就需要自己 ...
- 使用 FiddlerCore 自定义 HTTP/HTTPS 网络代理
Fiddler 是个很好用的网络请求查看与调试工具,还可以写插件来扩展其功能. Fiddler 插件开发,使用 WPF 作为 UI 控件 - J.晒太阳的猫 - 博客园 但部分场景下,需要自定义很多网 ...
- 简单跳转到微信分享,基于libWeiChatSDK 和简单的自定义UIActivityViewController
一.自定义UIActivity: 如果想要自定义UIActivity必须知道UIActivityViewController.首先这个类主要是用于接受字符串,RUL类型和图片类型的数据用于分享和操作的 ...
- JS简单实现自定义右键菜单
RT,一个简单的例子,仅仅讲述原理 <div id="menu" style="width: 0;height: 0;background: cadetblue;p ...
随机推荐
- SQLSERVER中NULL位图的作用
SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站:www.sqlskills.com,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Da ...
- 在jexus下如何简单的配置多站点
参考:linuxdot.net 其实jexus的配置还是比较简单的,目录即站点(一个目录就是一个站点,一个配置文件就是一个站点) 如uustudy.net,在siteconf目录下创建一个uustud ...
- mono for android 获取手机照片或拍照并裁剪保存
axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...
- 【腾讯Bugly干货分享】微信终端跨平台组件 Mars 系列 - 我们如约而至
导语 昨天上午,微信在广州举办了微信公开课Pro.于是,精神哥这两天的朋友圈被小龙的"八不做"刷屏了.小伙伴们可能不知道,下午,微信公开课专门开设了技术分论坛.在分论坛中,微信开源 ...
- CSharpGL(20)用unProject和Project实现鼠标拖拽图元
CSharpGL(20)用unProject和Project实现鼠标拖拽图元 效果图 例如,你可以把Big Dipper这个模型拽成下面这个样子. 配合旋转,还可以继续拖拽成这样. 当然,能拖拽的不只 ...
- ABP框架 - 依赖注入
文档目录 本节内容: 什么是依赖注入 传统方式的问题 解决方案 构造器注入模式 属性注入模式 依赖注入框架 ABP 依赖注入基础 注册依赖 约定注入 辅助接口 自定义/直接 注册 使用IocManag ...
- 分段二次插值——用Python进行数值计算
事实上在实际使用中,高次插值显然是很不适合的,高次插值将所有样点包涵进一个插值函数中,这是次幂高的原因.高次计算复杂,而且刚开始的一点误差会被方的很大.因此将整个区间分为若干个小区间,在每一个小区间进 ...
- 解析大型.NET ERP系统 数据审计功能
数据审计,英语表达是Audit,是追踪数据变化的过程,记录数据变化前后的值,供参考分析.通过设置,ERP可以追踪一个表的所有字段的变化,也可以只记录指定的字段的值变化.欧美企业每年都有独立的审计部门, ...
- HTML5移动开发学习笔记之CSS3基础学习
CSS回顾 在学CSS3之前首先巩固下CSS的基础知识. 1.CSS框模型 举例子: #box { width: 70px; margin: 10px; padding: 5px; } 这个代码将出现 ...
- 带搜索的ComboBox
带搜索的ComboBox就是给ComboBox一个依赖属性的ItemSource,然后通过数据源中是否包含要查询的值,重新给ComboBox绑定数据源. public class EditComboB ...