1.UIDatePicker继承自UIControl,因此不会通过代理来监听事件的改变,而是通过addTarget来监听事件。监听的事件是值改变事件。

2.UIPickerView继承自UIView,里面有数据源和代理,因此UIPickerView展示数据通过数据源,监听事件通过代理。

一、如何监听控件的一些事件 或者 行为

* 如果父类是UIControl,说明是通过addTarget:action:forControlEvents:方法来监听控件的一些事件

* 如果父类不是UIControl,说明一般是通过代理方法来监听控件的一些行为

二、UIDatePicker 1.常见属性

/*

样式

UIDatePickerModeTime,时间

UIDatePickerModeDate,日期

UIDatePickerModeDateAndTime 日期 + 时间

*/

@property(nonatomic) UIDatePickerMode datePickerMode;

/*

区域

中国:[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"]

*/

@property(nonatomic,retain) NSLocale *locale;

2.事件监听

1> 因为它继承自UIControl,所以跟按钮一样监听

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;

2> 事件类型:UIControlEventValueChanged

三、UIPickerView

1.需要靠dataSource和delegate来显示数据

@property(nonatomic,assign) id<UIPickerViewDataSource> dataSource;

@property(nonatomic,assign) id<UIPickerViewDelegate>   delegate;

2.常见数据源和代理方法

1> 数据源方法

// 一共有多少列

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;

// 第component列有多少行

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;

2> 代理方法

// 第component列第row行显示怎样的文字

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;

// 第component列第row行显示怎样的view

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;

// 选中了第component列第row行就会调用

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;

3.常见方法

1> 是否显示“选中指示器”

@property(nonatomic) BOOL showsSelectionIndicator;

2> 刷新数据(重新调用数据源和代理的方法来显示数据)

- (void)reloadAllComponents;// 刷新所有的列

- (void)reloadComponent:(NSInteger)component;// 只刷新第component列

3> 通过代码选中第component列第row行

- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated;

4> 获得第component列所选中的行号

- (NSInteger)selectedRowInComponent:(NSInteger)component;

四、UITextField 1.常见属性

1> 键盘

@property (readwrite, retain) UIView *inputView;

2> 键盘顶部的工具条

@property (readwrite, retain) UIView *inputAccessoryView;

3> 代理

@property(nonatomic,assign) id<UITextFieldDelegate> delegate;

2.常见方法

1> 叫出键盘

- (BOOL)becomeFirstResponder;

2> 退出键盘

- (BOOL)resignFirstResponder;

3.常见代理方法

1> 如果返回NO,代表文本框不能编辑、不能弹出键盘

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField;

2> 如果返回NO,代表禁止改变文本框的文字(不能增加、删除文字)

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;

3> 点击了键盘右下角的按钮就会调用(return key)

- (BOOL)textFieldShouldReturn:(UITextField *)textField;

五、UIButton的状态

UIControlStateNormal  // 默认、普通

UIControlStateHighlighted // 高亮(当用户长按的时候达到这种状态)

UIControlStateDisabled // 不可用(这种状态下的按钮不能处理任何点击事件,enabled = NO的时候就能达到这种状态)

// 当切换状态的时候,按钮就会显示对应状态的背景图片、小图片、文字、文字颜色

六、控件的封装

1.为什么封装?

1> 重用某个常用的功能

2> 屏蔽某个功能的实现细节

2.封装的步骤

1> 自定义一个View(新建一个继承UIView的类)

2> 如果控件内部的内容是固定的,可以用一个xib文件来描述所封装控件内部的细节

3> 所封装控件内部的事件,应该通过代理传递出去 * 当所封装控件内部发生了一些事情,应该通知代理,代理得知内部的事件后,就可以在代理方法中实现想做的事情

1.点餐系统思路

步骤一:遵守和实现UIPickerView的数据源。

步骤二:加载plist文件。

步骤三:遵守和实现UIPickerView的代理方法,监听选中每一行的方法。

步骤四:监听UIBarButtonItem随机的事件

注意:UIPickerView代理方法只有手动选中某一行,才会通知代理,通过代码选中,不会调用代理方法。

2.城市选择思路

步骤一:解析plist文件,创建对应的模型。

步骤二:用一个数组将模型保存起来。

步骤三:手动代码创建UIPickerView,实现它的数据源和代理方法。

步骤四:默认选中第0个省份的第0个城市。

3.国旗例子思路

步骤一:解析plist文件,创建对应的模型

步骤二:用一个数组将模型保存起来

步骤三:实现UIPickerView的数据源和代理方法

步骤四:创建一个xib,描述每一行显示的视图

步骤五:创建自定义视图,和xib绑定。并且与xib中的控件连线,并且给外界提供一个接口,返回自定义视图。

步骤六:优化UIPickerView

4.键盘处理例子思路

步骤一:简单搭建界面 监听性别按钮点击,修改按钮的状态

步骤二:自定义键盘

生日键盘

1.1 禁止生日键盘输入文字

1.2 监听生日键盘的值改变事件 地址键盘

2.1 实现数据源和代理方法和之前城市选中例子相同。

城市键盘

1.用xib描述城市键盘,并且设置UIPickerView的代理和数据源,创建自定义视图。

2.加载数据,在awakeFromNib中调用实现数据源和代理方法。

3.调用自定义视图设置城市键盘 给自定义城市键盘声明一个协议,并添加一个代理属性,当滚动键盘的时候,通知代理做些事情。

4.设置自定义城市键盘的代理为控制器,并且实现代理方法。

步骤三。重构代码

1.cheakBox 封装性别按钮代码,用一个xib来描述,并清空背景颜色 自定义一个自定义性别视图和xib绑定,监听按钮的点击 手动添加自定义性别视图,

步骤四:工具条

1.创建一个xib描述工具条 将toolbar用view包装起来,目的不让外界修改toolbar,因为外界拿到的是UIView,而不是toolbar,就不能直接获取toolbar里面的属性了。

2.自定义一个自定义工具条类,和xib绑定。

3.定义一个协议,通知代理按钮点击事件 定义一个枚举类型,区分按钮   

4.2 协议方法将按钮类型传递出去   

4.3 当点击按钮时,通知代理 让控制器作为工具条的代理,并实现工具条代理方法

步骤五:躲避键盘

iOS基础 - UIDatePicker and UIPickerView and UITextField的更多相关文章

  1. ios基础篇(五)——UITextField的详细使用

    UItextFieldField通常用于外部数据输入,以实现人机交互. 以下是UItextFieldField的属性及常见用法: 1.textField :设置文本框的默认文本. 2.Placehol ...

  2. IOS基础学习-2: UIButton

    IOS基础学习-2: UIButton   UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...

  3. iOS基础问答面试

    <简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...

  4. 10-UIKit(UIDatePicker、UIPickerView、UIWebView、Storyboard)

    目录: 1. UIDatePicker 2. UIPickerView 3. UIPickerView多列关联 4. UIWebView 5. Storyboard(故事板) 回到顶部 1. UIDa ...

  5. iOS基础UI控件介绍-Swift版

    iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ...

  6. iOS 基础日记-修饰符

    今晚随便温习了一下iOS 基础关于修饰符这块的东西,下面简单的来描述一下,其中有的也是在网络学习到的: strong与weak是由ARC新引入的对象变量属性 ARC的解释:ARC引入了新的对象的生命周 ...

  7. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

  8. [置顶] IOS 基础入门教程

    IOS 基础入门教程 教程列表: IOS 简介 IOS环境搭建 Objective C 基础知识 创建第一款iPhone应用程序 IOS操作(action)和输出口(Outlet) iOS - 委托( ...

  9. iOS 基础:Frames、Bounds 和 CGGeometry

    https://segmentfault.com/a/1190000004695617 原文:<iOS Fundamentals: Frames, Bounds, and CGGeometry& ...

随机推荐

  1. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框 ...

  2. HDU 1248 冰封王座(dp)

    Problem Description 不死巫妖王拉工资,死亡骑士得到N美元的钞票(记,只有一个纸币),战斗中频繁的死掉,他决定给自己买一些道具,于是他来到了地精商店前. 死亡骑士:"我要买 ...

  3. 经Apache将tomcat转用80port这两个域名

    一般用tomcat通告Java web项目采用www.xxx.com:8080/appname/xxxservlet要访问一个简单的服务,这会'暴漏'应用程序名称(当然,你也可以摆脱),它看起来并不规 ...

  4. cocos2dx 3.1.1移植安卓apk (lua交叉编译器项目 mac环境)

    cocos2dx 3.1.1   lua项目安卓交叉编译 mac环境 本文基于ant,sdk,ndk,adt等软件和环境已经事前设置好 1\新建项目 在mac的终端下输入命令: cocos new t ...

  5. Cloudera CDH 5集群搭建(yum 方式)

    1      集群环境 主节点 master001 ~~ master006 从节点 slave001 ~~ slave064 2      安装CDH5的YUM源 rpm -Uvhhttp://ar ...

  6. Redhat Linux下的python版本号升级

    运行#Python与#python -V,看到版本是2.4.3,非常老了,并且之前写的都是跑在python3.X上面的,3.X和2.X有非常多不同, 有兴趣的朋友能够參考下这篇文章:  http:// ...

  7. spring data jpa使用懒操作

    如果model对象的某属性使用lazy load,调用这个属性时会报错, failed to lazily initialize a collection of role could not init ...

  8. mac os x10.11.2系统eclipse无法读取环境变量的问题

    eclipse调试Android自动化脚本的时候一直无法找到adb,遇到这么坑的问题,折腾死了,记录一下. mac os x10.11.2系统GUI程序(eclipse)无法读取~/.bash_pro ...

  9. 编译 & 预处理

    编译(compilation , compile) 1.利用编译程序从源语言编写的源程序产生目标程序的过程. 2.用编译程序产生目标程序的动作. 编译就是把高级语言变成计算机可以识别的2进制语言,计算 ...

  10. 【百度地图API】建立全国银行位置查询系统(二)——怎样为地图添加控件

    原文:[百度地图API]建立全国银行位置查询系统(二)--怎样为地图添加控件 <摘要>你将在第二章中学会以下知识: 使用手写代码的利器——notepad++: 如何为地图添加控件——鱼骨. ...