ios开发实践之UIDatePicker(已对之前无法解决的问题做了解答)
需求:要做一个生日选择的控件,但除了选择之外还需要自定义几个控件,跟生日选择控件组合一起。
做法:自定义了一个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(已对之前无法解决的问题做了解答)的更多相关文章
- iOS 开发实践之 Auto Layout
原:http://xuexuefeng.com/autolayout/?utm_source=tuicool 本文是博主 iOS 开发实践系列中的一篇,主要讲述 iOS 中 Auto Layout(自 ...
- iOS开发实践-OOM治理
概览 说起iOS的OOM问题大家第一想到的应该更多的是内存泄漏(Memory Leak),因为无论是从早期的MRC还是2011年Apple推出的ARC内存泄漏问题一直是iOS开发者比较重视的问题,比如 ...
- iOS开发实践之网络检測Reachability
在网络应用开发中.有时须要对用户设备的网络状态进行实时监控.以至于对用户进行友好提示 或者依据不同网络状态处理不一样的逻辑(如视频播放app,依据当前的网络情况自己主动切换视频清晰度等等).用Reac ...
- IOS开发UI基础 UIDatePicker的属性
UIDatePicker • Locale设置DatePicker的地区,即设置DatePicker显示的语言.// 1.跟踪所有可用的地区,取出想要的地区 NSLog(@& ...
- iOS开发实践:一个类微博客户端从启动到与用户交互的过程
本文基于数据字典和数据流图两种工具讲述一个完整微博客户端的实现.数据字典和数据流图都可以用来表达线程的执行流程,同时定义了需要的类,是进一步设计类的基础. 数据字典实际上是一张表,表的第一个字段是程序 ...
- iOS开发技巧 - 使用UIDatePicker来选择日期和时间
(Swift) import UIKit class ViewController: UIViewController { var datePicker: UIDatePicker! func dat ...
- iOS开发实践之GET和POST请求
GET和POST请求是HTTP请求方式中最最为常见的. 在说请求方式之前先熟悉HTTP的通信过程: 请求 1.请求行 : 请求方法.请求路径.HTTP协议的版本号 GET /MJServer/reso ...
- iOS开发实践之多线程(单例模式)
单例模式的作用:可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源. 单例模式的使用场合:在这个应用程序中,共享一份资源(这份资源只需要创建 ...
- iOS开发实践之xib载入注意问题
xib都会addSubview加入到控制器view中时程序崩溃.错误提示: 'NSInvalidArgumentException', reason: '-[ UITapGestureRecogniz ...
随机推荐
- 用fcntl()设置堵塞函数的堵塞性质
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types. ...
- 【百度地图API】除夕夜,大家一起来赶走“夕”——删除标注功能
原文:[百度地图API]除夕夜,大家一起来赶走"夕"--删除标注功能 任务描述: 农历12月31日是中国传统的节日——除夕.你知道除夕是怎么来的麼? “夕”在中国古代神话中,可是一 ...
- input的width和padding-left同时存在时IE兼容问题
总的来说,text-indent不影响元素的最终宽度但是有兼容性问题,padding-left在中国主流浏览器IE低版本下影响最终宽度,但在chrome和firefox下不影响宽度,但是可以通过CSS ...
- Windows 10技术布局,谈微软王者归来
Windows 10技术布局,谈微软王者归来 每个时代都有王者,王者的成功,往往是因为恰逢其时地发布了一个成功的产品(具有里程碑意义,划时代的产品).Windows 95的成功标示着微软是PC时代的王 ...
- Excel 宏
实现1到40行的第一列 ,全部 累加一个字符串 A1 Sub Macro1() Dim i As IntegerFor i = 1 To 40Sheets(1).Cells(i, 1).Value = ...
- linux简单的数据包捕获分析
有时我们会遇到一些问题,需要捕捉数据包分析,当手头有没有专业的抓图工具,您可以使用tcpdump相反,看看(一般版本附带这个工具) 比如,我们要分析eth0与接口192.168.7.188 这个对象I ...
- linux下C语言中的flock函数使用方法 .
表头文件 #include<sys/file.h> 定义函数 int flock(int fd,int operation); 函数说明 flock()会依參数operation所指 ...
- webkit内核下的mouseup后mousemove自动触发问题及解决方法
如题,就以chrome为代表举例说明遇到mousemove的问题. 为body分别绑定onmousedown.onmousemove.onmouseup,并为触发时打印至控制台.代码如下(同学不要忘记 ...
- Ninject.Extensions.
最近在使用IoC进行一个较复杂的项目进行架构,在IoC的选择上让我很是纠结.首先我不喜欢大量的配置文件进行配置,那简直是噩梦,比学习一门编程语言还痛苦.我喜欢前一段时间看EF的CodeFirst的那种 ...
- sudo找不到npm的解决办法及及使用cnpm加速[已解决]
sudo ln -s /usr/local/bin/node /usr/bin/node sudo ln -s /usr/local/lib/node /usr/lib/node sudo ln -s ...