iOS——UIControl

来源:互联网 发布:诺手勇敢的心淘宝价钱 编辑:程序博客网 时间:2024/06/04 01:08

一、概述

1. UIControl 对象

1)UIControl 类是好多控件的父类,但是不能直接使用 UIControl 类,它只是定义了子类通用的方法
2)UIControl 是 UIView 的子类,所以是一个视图控件,可以显示在屏幕上;UIControl 也是 UIResponder 的子类,所以可以响应一系列的事件,例如 触摸事件
3)UIControl 类采用了一种新的事件处理方式,将普通的触摸事件变得更为简单 :当触摸一个控件时,触摸事件到达 UIControl 对象(由响应链传送)时,在 UIResponder 方法中(touchesBegan:withEvent:等),UIControl 将触摸事件转换为 控件事件
简单的说,UIControl 把触摸事件封装成了简单的 控件事件;例如通过 UIControl 对象处理后,按下按钮的事件就被封装成了一个 控件事件,而不用去判断触摸屏幕的过程
例如 : 按钮的单击事件 UIControlEventTouchUpInside

2. UIControl 属性

1)设置控件是否激活;默认为 YES,即激活;当设置为 NO 时,代表未激活,此时控件会忽任何触摸事件,同时,不同的控件还回忆不同的方式呈现出未激活时的形态,比如变成灰色不可用

@property(nonatomic,getter=isEnabled)BOOL enabled;


2)当用户选择控件时,该属性会变为 YES;默认为 NO,子类通常可以通过设置该属性来选中子类控件

@property(nonatomic,getter=isSelected)BOOL selected; 


3)设置控件的高亮状态;默认为 NO

@property(nonatomic,getter=isHighlighted)BOOL highlighted;


4)设置控件在垂直方向上如何布置自身的内容;默认为 UIControlContentVerticalAlignmentCenter 居中

@property(nonatomic)UIControlContentVerticalAlignment contentVerticalAlignment;

UIControlContentVerticalAlignmentCenter 枚举如下 :

typedef NS_ENUM(NSInteger, UIControlContentVerticalAlignment) {    UIControlContentVerticalAlignmentCenter  = 0,   // 居中对齐    UIControlContentVerticalAlignmentTop     = 1,   // 顶端对齐    UIControlContentVerticalAlignmentBottom  = 2,   // 底端对齐    UIControlContentVerticalAlignmentFill    = 3,   // 填满整个控件};

5)设置控件在水平方向上如何布置自身的内容;默认为 UIControlContentHorizontalAlignmentCenter居中

@property(nonatomic)UIControlContentHorizontalAlignment contentHorizontalAlignment;

UIControlContentHorizontalAlignmentCenter枚举如下 :

typedef NS_ENUM(NSInteger, UIControlContentHorizontalAlignment) {    UIControlContentHorizontalAlignmentCenter = 0,   // 居中对齐    UIControlContentHorizontalAlignmentLeft   = 1,   // 左端对齐    UIControlContentHorizontalAlignmentRight  = 2,   // 右端对齐    UIControlContentHorizontalAlignmentFill   = 3,   // 填满整个控件};


6)获取控件的状态

@property(nonatomic,readonly)UIControlState state;

UIControlState枚举如下 :

typedef NS_OPTIONS(NSUInteger, UIControlState) {    UIControlStateNormal       = 0,        //   普通状态    UIControlStateHighlighted  = 1 << 0,   //   高亮状态    UIControlStateDisabled     = 1 << 1,   //   选中状态    UIControlStateSelected     = 1 << 2,   //   禁用状态    UIControlStateFocused NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 3,  // 聚焦状态      UIControlStateApplication  = 0x00FF0000,   //   当用作应用标志时    UIControlStateReserved     = 0xFF000000    //   内部框架预留,无意义};

7)添加 目标-动作对为不同的事件类型

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

UIControlEvent 枚举如下 :

typedef NS_OPTIONS(NSUInteger, UIControlEvents) {    UIControlEventTouchDown                = 1 <<  0,     // 单点触摸事件,用户触摸屏幕时    UIControlEventTouchDownRepeat          = 1 <<  1,     // 多点触摸事件,用于第二、第三根手指触摸时    UIControlEventTouchDragInside          = 1 <<  2,     // 触摸在控件窗口内拖动时    UIControlEventTouchDragOutside         = 1 <<  3,     // 触摸在控件窗口外拖动时    UIControlEventTouchDragEnter           = 1 <<  4,     // 触摸在窗口之外拖动到窗口内部时    UIControlEventTouchDragExit            = 1 <<  5,     // 触摸在窗口之内拖动到窗口外部时    UIControlEventTouchUpInside            = 1 <<  6,     // 在控件之内的触摸抬起时    UIControlEventTouchUpOutside           = 1 <<  7,     // 在控件之外的触摸抬起时    UIControlEventTouchCancel              = 1 <<  8,     // 触摸事件取消(例如正在触摸时有电话打进来)    UIControlEventValueChanged             = 1 << 12,     // 当控件的值在发生改变时,用于滑块、分段控件、以及娶她取值控件    UIControlEventPrimaryActionTriggered NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 13, // semantic action: for buttons, etc.    UIControlEventEditingDidBegin          = 1 << 16,     // 当文本控件开始编辑时,用于 UITextField    UIControlEventEditingChanged           = 1 << 17,     // 当文本控件的文本被改变时,用于 UITextField    UIControlEventEditingDidEnd            = 1 << 18,     // 当文本控件结束编辑时,用于 UITextField    UIControlEventEditingDidEndOnExit      = 1 << 19,     // 当文本控件内通过按下回车键结束编辑时    UIControlEventAllTouchEvents           = 0x00000FFF,  // 通知所有关于触摸的事件    UIControlEventAllEditingEvents         = 0x000F0000,  // 通知所有关于文本编辑的事件    UIControlEventApplicationReserved      = 0x0F000000,  // range available for application use    UIControlEventSystemReserved           = 0xF0000000,  // range reserved for internal framework use    UIControlEventAllEvents                = 0xFFFFFFFF   // 通知所有事件};

8)删除 目标-动作对为不同的状态
将参数 action 传 nil 就可以将所有的动作删除

- (void)removeTarget:(nullableid)target action:(nullableSEL)action forControlEvents:(UIControlEvents)controlEvents;


9)获取所有的目标集合

@property(nonatomic,readonly)NSSet *allTargets;


10)获取所有的事件类型

@property(nonatomic,readonly)UIControlEvents allControlEvents;

0 0