需求:要做一个生日选择的控件,但除了选择之外还需要自定义几个控件,跟生日选择控件组合一起。

做法:自定义了一个UIImageView,并且作为背景。在这个背景view上再添加其他button和时间选择器

问题及解决:1.UIDatePicker无法调整大小,必须用系统默认的大小,但可以改变位置。解决方法只有自定义实现UIPickerView,实现2个相关代理。

      2.在网上个关于UIDatePicker看到一个很搞笑的问题,就是关于如何监听UIDatePicker上的选择事件的,其实官方文档已经写得很清楚了,UIDatePicker并不是UIPickerView得子类,但持有其对象,但关于如何操纵这个对象,并没有找到相关方法,想监听其实也简单,只需下面代码而已。

[_picker addTarget:selfaction:@selector(didPicker) forControlEvents:UIControlEventValueChanged];

添加事件即可。

      3.关于UIImageView上的userInteractionEnabled,其实在UIView上都有这个属性,但默认上都是YES,而UIImageView是NO!!,再来看看官方描述就知道蛋疼了。。:

  A Boolean value that determines whether user events are ignored and removed from the event queue.

      当时弄了好久无法滚动UIDatepicker,以为是第一响应者问题,多种无果啊,感觉类似于android上的焦点问题.

问题补充:回头做了整理,发现前面的总结1是不科学的,因为如果直接通过官方给的文档去改,确实不行,但是,如果通过其他方法呢?看来看去,之前做的那个UIDatepicker还是很丑,所以一直在想有什么方法能够解决,后来在解决一个插件的时候,得到了灵感,就是继承原来的datepicker类,并在重绘方法drawRect中对父类的view进行修改。具体代码如下:

- (void)drawRect:(CGRect)rect

{

// Drawing code

UIView *v1 = [[selfsubviews]objectAtIndex:0];

UIView *v3 = [[v1 subviews]objectAtIndex:0];

[v3 setBackgroundColor:[UIColorcolorWithRed:0.247green:0.251blue:0.251alpha:1]];

//编辑区域上下左右边框

UIView *v20 = [[v1 subviews]objectAtIndex:20];

v20.alpha = 0.0;

int i=0;

for(UIView* v in [v1 subviews]){

NSString *s = NSStringFromCGSize(v.frame.size);

s = [NSString stringWithFormat:@"%d:::%@",i++,s];

myLog(s,nil);

}

/*

v2: 第一个选择器白色底高度

v4: 第一个显示的数据高度

v5: 第一个选择器背景高度

v10:第二个选择器的数据高度

v20 中间编辑框背景

*/

UIView *v00 = [[v1 subviews]objectAtIndex:0];

[selfchangeHeight:v00 height:130];

UIView *v2 = [[v1 subviews]objectAtIndex:2];

CGRect myFrame = v2.frame;

myFrame.size.height = 124;

v2.frame = myFrame;

UIView *v4 = [[v1 subviews]objectAtIndex:4];

[selfchangeHeight:v4 height:124];

UIView *v5 = [[v1 subviews]objectAtIndex:5];

[selfchangeHeight:v5 height:124];

//2

UIView *v8= [[v1 subviews]objectAtIndex:8];

[selfchangeHeight:v8 height:124];

UIView *v10 = [[v1 subviews]objectAtIndex:10];

[selfchangeHeight:v10 height:124];

UIView *v11 = [[v1 subviews]objectAtIndex:11];

[selfchangeHeight:v11 height:124];

//3

UIView *v14= [[v1 subviews]objectAtIndex:14];

[selfchangeHeight:v14 height:124];

UIView *v16 = [[v1 subviews]objectAtIndex:16];

[selfchangeHeight:v16 height:124];

UIView *v17 = [[v1 subviews]objectAtIndex:17];

[selfchangeHeight:v17 height:124];

[selfsetNeedsDisplay];

}

-(void)changeHeight:(UIView*)v height:(NSInteger)height{

CGRect myFrame = v.frame;

myFrame.size.height = height;

v.frame = myFrame;

}

ios开发实践之UIDatePicker(已对之前无法解决的问题做了解答)的更多相关文章

  1. iOS 开发实践之 Auto Layout

    原:http://xuexuefeng.com/autolayout/?utm_source=tuicool 本文是博主 iOS 开发实践系列中的一篇,主要讲述 iOS 中 Auto Layout(自 ...

  2. iOS开发实践-OOM治理

    概览 说起iOS的OOM问题大家第一想到的应该更多的是内存泄漏(Memory Leak),因为无论是从早期的MRC还是2011年Apple推出的ARC内存泄漏问题一直是iOS开发者比较重视的问题,比如 ...

  3. iOS开发实践之网络检測Reachability

    在网络应用开发中.有时须要对用户设备的网络状态进行实时监控.以至于对用户进行友好提示 或者依据不同网络状态处理不一样的逻辑(如视频播放app,依据当前的网络情况自己主动切换视频清晰度等等).用Reac ...

  4. IOS开发UI基础 UIDatePicker的属性

    UIDatePicker        •    Locale设置DatePicker的地区,即设置DatePicker显示的语言.// 1.跟踪所有可用的地区,取出想要的地区    NSLog(@& ...

  5. iOS开发实践:一个类微博客户端从启动到与用户交互的过程

    本文基于数据字典和数据流图两种工具讲述一个完整微博客户端的实现.数据字典和数据流图都可以用来表达线程的执行流程,同时定义了需要的类,是进一步设计类的基础. 数据字典实际上是一张表,表的第一个字段是程序 ...

  6. iOS开发技巧 - 使用UIDatePicker来选择日期和时间

    (Swift) import UIKit class ViewController: UIViewController { var datePicker: UIDatePicker! func dat ...

  7. iOS开发实践之GET和POST请求

    GET和POST请求是HTTP请求方式中最最为常见的. 在说请求方式之前先熟悉HTTP的通信过程: 请求 1.请求行 : 请求方法.请求路径.HTTP协议的版本号 GET /MJServer/reso ...

  8. iOS开发实践之多线程(单例模式)

    单例模式的作用:可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源. 单例模式的使用场合:在这个应用程序中,共享一份资源(这份资源只需要创建 ...

  9. iOS开发实践之xib载入注意问题

    xib都会addSubview加入到控制器view中时程序崩溃.错误提示: 'NSInvalidArgumentException', reason: '-[ UITapGestureRecogniz ...

随机推荐

  1. EF中的EntityState几个状态的说明

    之前使用EF,我们都是通过调用SaveChanges方法把增加/修改/删除的数据提交到数据库,但是上下文是如何知道实体对象是增加.修改还是删除呢?答案是通过EntityState枚举来判断的,我们看一 ...

  2. 140724夏训.txt

    1.同余定理    (a+b)%c==(a%c+b%c)%c    (a*b)%c==[(a%c)*(b%c)]%c          由于有的数在int范围内,可是两个的乘积却超过了int范围,这样 ...

  3. 软件project(十)——软件维护

    软件维护是软件开发的最长的阶段之一,的精力和费用也是最多的一个阶段,基本上软件交付之后就进入了维护阶段,占整个系统生存周期的40%~70%. 导图:         软件系统并非一成不变的.有时候我们 ...

  4. [MySQL]-->查询5天之内过生日的同事中的闰年2月29日问题的解决过程

    前言: 上次写了查询5天之内过生日的同事中的跨年问题的解决过程,网址为:http://blog.csdn.net/mchdba/article/details/38952033 ,当中漏了一个闰年2月 ...

  5. [LeetCode]N-Queens 八皇后问题扩展(经典深层搜索)

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  6. 文件同步服务器,iis 集群 ,代码同步(一)

    文件同步服务器 BitTorrent Sync 有点像TeamViewer远程协助 软件,私钥连接. 使用版本就30 天,最近测试了,功能不够理想.有点遗憾,我觉得我可以写一个! 确实很好用.

  7. 搭建及修正Hadoop1.2.1 MapReduce Pipes C++开发环境

    Hadoop目前人气超旺,返璞归真的KV理念让人们再一次换一个角度来冷静思考一些问题. 但随着近些年来写C/C++的人越来越少,网上和官方WIKI的教程直接落地的成功率却不高,多少会碰到这样那样的问题 ...

  8. Android 2.3 版本中链接边框问题解决

    在做移动互联网开发的过程中,同样需要考虑到移动终端(如手机.平板)的不同版本浏览器兼容问题,在Android 2.3 版本的默认浏览器中有一个bug-会自动给所有链接文本在点击操作过程中加黄色或绿色边 ...

  9. MVC 5 Scaffolding多层架构代码生成向导开源项目

    asp.net MVC 5 Scaffolding多层架构代码生成向导开源项目(邀请你的参与)   Visual Studio.net 2013 asp.net MVC 5 Scaffolding代码 ...

  10. vs.net 2013 Saffolding功能扩展

    vs.net 2013 Saffolding功能扩展 Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个&l ...