代码改变世界

IOS - 控制事件UIControlEvents

2015-08-18 21:51  HermitCarb  阅读(561)  评论(0)    收藏  举报

今天忙里偷闲,测试一下原先一直似懂非懂的东西。

 1 typedef NS_OPTIONS(NSUInteger, UIControlEvents) {
 2     //在控件内按下
 3     UIControlEventTouchDown           = 1 <<  0,      // on all touch downs
 4 
 5     //重复在控件内按下
 6     UIControlEventTouchDownRepeat     = 1 <<  1,      // on multiple touchdowns (tap count > 1)
 7 
 8     //(在控件内按下后),在控件范围内拖动,(但凡拖动,就会触发。拖动过程可多次触发)
 9     UIControlEventTouchDragInside     = 1 <<  2,
10 
11     //(在控件内按下后,然后拖出控件范围),继续在控件范围外拖动,(但凡拖动,就会触发。拖动过程可多次触发)
12     UIControlEventTouchDragOutside    = 1 <<  3,
13 
14     //(在控件内按下后,然后拖动出控件范围),然后再拖进控件范围
15     UIControlEventTouchDragEnter      = 1 <<  4,
16 
17     //(从控件内按下),然后拖出控件范围
18     UIControlEventTouchDragExit       = 1 <<  5,
19 
20     //(从控件内按下,……),在控件范围内放开
21     UIControlEventTouchUpInside       = 1 <<  6,
22 
23     //(从控件内按下,……),在控件范围外放开
24     UIControlEventTouchUpOutside      = 1 <<  7,
25 
26     //(从控件内按下,……),增加太多手指或设备上锁或电话打入,(取消其他的触摸事件,但这本身是一个事件)
27     UIControlEventTouchCancel         = 1 <<  8,
28 
29  
30 
31     //控件值发生改变,(用于滑块,分段控件以及其他取值的控件)
32     UIControlEventValueChanged        = 1 << 12,     // sliders, etc.
33 
34  
35 
36     //文本控件开始编辑,(成为第一响应控件)
37     UIControlEventEditingDidBegin     = 1 << 16,     // UITextField
38 
39     //文本控件中的文本发生改变
40     UIControlEventEditingChanged      = 1 << 17,
41 
42     //(文本控件处于编辑状态),文本控件结束编辑,(注销第一响应控件)
43     UIControlEventEditingDidEnd       = 1 << 18,
44 
45     //(文本控件处于编辑状态),按下回车键或发生其等价行为
46     UIControlEventEditingDidEndOnExit = 1 << 19,     // 'return key' ending editing
47 
48  
49 
50     //任何触摸(从手指按下开始到手指松开结束,这之间的每一个事件后面都会有一个触摸事件发生)
51     UIControlEventAllTouchEvents      = 0x00000FFF,  // for touch events
52 
53     //任何编辑(从文本开始到文本编辑结束,这之间的每一个事件后面都会有一个编辑事件)
54     UIControlEventAllEditingEvents    = 0x000F0000,  // for UITextField
55 
56     //应用保留事件()
57     UIControlEventApplicationReserved = 0x0F000000,  // range available for application use
58 
59     //系统保留事件
60     UIControlEventSystemReserved      = 0xF0000000,  // range reserved for internal framework use
61 
62     //任何事件(但凡有事件发生,都会在后面发生这个事件)
63     UIControlEventAllEvents           = 0xFFFFFFFF
64 };

 

 以上测试必要的几点说明:

  1. 控件内和控件范围内的区别:

    1. 控件内指控件所占视图大小,也就是控件的frame;

    2. 控件范围内指当控件被按下后拖动至足够远处使控件无法响应单击事件的范围。这个范围比控件的frame大得多,大约为70像素,上下左右均算在内,即控件的大小为X*Y时,这个范围约为(X+140)*(Y+140)。

  2. 注释内容中的括号的内容指,这一事件的先决条件,在完成先决条件时,也会触发其先决事件,但先决事件是和本事件是完全不同的事件。编程时在同一控件的多事件处理时一定要注意各事件的顺序。一般是先处理先决条件比较多的事件,然后处理简单事件,也就是下面的情况-b。

    比如:

    1. 统计控件的事件被触发的次数,只需要简单统计UIControlEventTouchDown的次数;

    2. 响应用户的单击和双击事件时,一般优先响应双击事件,当用户点击一下后开始等待一段时间,当双击响应失败后(此时间内没有第二次点击),才去响应单击事件。