• iOS基础


    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 当点击按钮时,通知代理 让控制器作为工具条的代理,并实现工具条代理方法

    步骤五:躲避键盘

  • 相关阅读:
    Canvas 五角星绘制
    Bob Waters
    自定义样式,使用浏览器阅读epub格式的电子书
    FileZilla Server ftp 服务器下通过alias别名设置虚拟目录(多个分区)
    【转载】什么样的妻子什么样的人生
    win10与Ubantu双系统:Linux下开启FTP服务器与创建无线热点(实现文件共享)
    这世上,没有完美的父母,也没有完美的孩子
    考研数学复习建议与资料
    eclipse中修改jsp文件中内容,但是刷新网页内容却不变问题
    JavaScript基础2
  • 原文地址:https://www.cnblogs.com/monicaios/p/3506270.html
Copyright © 2020-2023  润新知