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

做法:自定义了一个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. Java设计模式菜鸟系列(四)工厂方法模式建模与实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39760895 工厂方法模式(Factory Method) 工厂方法:顾名思义,就是调用工 ...

  2. Ubuntu环境下的Redis 配置与C++使用入门

      Redis是一个高性能的key-value数据库. Redisedis的出现,非常大程度补偿了memcached这类key/value存储的不足,在部分场合能够对关系数据库起到非常好的补充作用.它 ...

  3. Matlab基于学习------------------函数微分学

    <span style="font-size:18px;">% 函数微分学 % 函数微分学难比功能区,中的积分函数的性质整体叙述性说明.在某些时候差描述叙事的斜率功能 ...

  4. Linux下df与du两个命令的差别?

    Linux下df与du两个命令的差别? 一.df显示文件系统的使用情况,与du比較,就是更全盘化. 最经常使用的就是 df -T,显示文件系统的使用情况并显示文件系统的类型. 举比例如以下: [roo ...

  5. eclipse中使用git进行版本号控制

    协作开发的时候没有版本号控制是非常痛苦的事情,使用git能够非常好的完毕这项任务,由于非常多的开源码都在github上公布,因此学会使用git是非常重要的一项技能. 这篇写的是在eclipse下使用的 ...

  6. Unofficial Microsoft SQL Server Driver for PHP (sqlsrv)非官方的PHP SQL Server 驱动

    原文 Unofficial Microsoft SQL Server Driver for PHP (sqlsrv) Here are unofficial modified builds of Mi ...

  7. 从零开始学习jQuery(剧场版) 你必须知道的javascript

    原文:从零开始学习jQuery(剧场版) 你必须知道的javascript 一.摘要 本文是jQuery系列教程的剧场版, 即和jQuery这条主线无关, 主要介绍大家平时会忽略的一些javascri ...

  8. 《C语言及程序设计初步》网络课程主页

    题记 CSDN要开在线教育频道,向我发出邀请,看能否开些课程. 我近日一直在关注着翻转课堂,试图在传统课堂中引入新的元素,这须要资源建设的积累.没有时间表的工作,非常难把握. 为CSDN做在线课程,为 ...

  9. 收集整理的非常有用的PHP函数

    原文:收集整理的非常有用的PHP函数 项目中经常会需要一些让人头疼的函数,作为开发者应该整理一个自己的函数库,在需要之时复制过来即可.本文作者收集整理数十个PHP项目中常用的函数,保证能正常运行,你只 ...

  10. Codeforces Round #FF 446A DZY Loves Sequences

    预处理出每一个数字能够向后延伸多少,然后尝试将两段拼起来. C. DZY Loves Sequences time limit per test 1 second memory limit per t ...