UIControl

来源:互联网 发布:梦里花落知多少评论 编辑:程序博客网 时间:2024/04/29 05:18

在学习Target-Action的时候,我们经常遇到的一块:UIControl,今天我们来学习UIControl

而在Target-Action是如何联系到了UIControl呢?  对了,就是通过target目标对象 和 action选择器下的方法 之间的联系事件Event。

而iOS的Event我们就肯定会联系到响应者类及其相关的机制,而为什么会扯出一个UIControl的类呢?

我们先来看看一张图:


由这个继承关系就可以看得非常清楚了,主要要记住几个主要的UIControl的子类:UIButton,UIDatePicker,UIPageControl,UISegmentedControl,UITextFiled,UISlider,UISwith


iOS为了交互上的Event更加明确在本来继承于UIResponder的UIView基础上由派生出UIControl这个子类,并且:

typedef NS_OPTIONS(NSUInteger, UIControlEvents) {    UIControlEventTouchDown           = 1 <<  0,      // on all touch downs    UIControlEventTouchDownRepeat     = 1 <<  1,      // on multiple touchdowns (tap count > 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,     // sliders, etc.    UIControlEventEditingDidBegin     = 1 << 16,     // UITextField    UIControlEventEditingChanged      = 1 << 17,    UIControlEventEditingDidEnd       = 1 << 18,    UIControlEventEditingDidEndOnExit = 1 << 19,     // 'return key' ending editing    UIControlEventAllTouchEvents      = 0x00000FFF,  // for touch events    UIControlEventAllEditingEvents    = 0x000F0000,  // for UITextField    UIControlEventApplicationReserved = 0x0F000000,  // range available for application use    UIControlEventSystemReserved      = 0xF0000000,  // range reserved for internal framework use    UIControlEventAllEvents           = 0xFFFFFFFF};

定义了一系列明确的枚举类型来让你选择相关的事件。而在target-action机制同时提供了绑定target-action-event的方法如:


有了添加,也有移除的相关方法:

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


同时还定义了一些列非常形象的事件状态,用法也不难:

typedef NS_OPTIONS(NSUInteger, UIControlState) {    UIControlStateNormal       = 0,    UIControlStateHighlighted  = 1 << 0,                  // used when UIControl isHighlighted is set    UIControlStateDisabled     = 1 << 1,    UIControlStateSelected     = 1 << 2,                  // flag usable by app (see below)    UIControlStateApplication  = 0x00FF0000,              // additional flags available for application use    UIControlStateReserved     = 0xFF000000               // flags reserved for internal framework use};


但是但是千万别以为iOS的target-action机制就只为UIResponder及其子类(UIViewControler,UIView,UIControl)它们服务,NSTimer内置的一些方法:

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

也是target-action机制下的。类似地还有一系列的手势动作等。



别的东西要用再查,最重要的事把关系弄清楚了。








0 0
原创粉丝点击