UIControl是控件的基类,例如:按钮,滑块等将用户的目的传递到应用程序中。UIContol不能直接的实例化,它只能通过继承的方式为子类提供公共的接口和动作结构。
UIControl的主要角色是定义一套接口和基础实现,为了当确定的事件发生的时候(比如点击了按钮)准备好动作消息(Action)并开始派发它们到自己的目标(Target,eg:UIViewController)。
UIControl类通常也包含多种设置和获取控件状态的方法-例如,决定一个控件是否使能或者高亮状态-和它定义了一些跟踪(在控件范围内)触摸事件的方法。这些跟踪方法可以被UIControl的子类所继承。
子类化注意事项
你想扩展一个UIControl子类可能是下面两个原因:
•通过特殊的事件(UIEvent)观察或者修改派发的动作消息(action)给目标(target).
实现方法,重载sendAction:to:forEvent:,评估传入的方法,目标对象,或者事件的位掩码,并按要求继续。
•提供自定义的跟踪行为(例如,改变高亮的外观)
准备并发送动作消息
- - sendAction:to:forEvent:
响应给定的事件,转发一个动作消息给应用程序派发给目标。
- (void)sendAction:(SEL)action
to:(id)target
forEvent:(UIEvent *)event
参数表
action |
|
target |
目标对象—动作消息发送的对象,如果为空,接受对象遍历响应链并发送动作消息给第一个愿意影响的对象
|
event |
一个代表事件的对象(在UIControl中很常见)它产出动作消息。事件可以是空的如果动作直接被调用而不是需要通过一个事件生成。例如,一个值改变消息可能是因为程序执行的结果,而不是用户触摸的结果
|
UIControl通过转发一个目标动作给单例UIApplication(在它的sendAction:to:fromSender:forEvent:方法中)来实现这个方法来派发给它的目标,或者如果它没有确定的目标,派发给响应链中第一个愿意处理这个消息的对象中。子类可能要重载这个方法来观察或者修改动作转发的行为。每进行一次指定控件的事件,可能会重复用sendActionsForControlEvents:
这个方法的实现,
- - sendActionsForControlEvents:
发送动作消息到给定的控制事件
- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents
参数表
- - addTarget:action:forControlEvents:
在内部的派发表中给特殊时间添加一个目标和动作
- (void)addTarget:(id)target
action:(SEL)action
forControlEvents:(UIControlEvents)controlEvents
参数表
target |
目标对象-动作消息的发送对象,如果它为空,那么将会搜索响应链中愿意响应这个动作消息的对象
|
action |
|
controlEvents |
|
你可能会多次调用这个方法,并且你可能需要为一个特殊的事件识别多个目标-动作组,动作消息可以是可选的包含发送者和事件作为参数
当你调用这个方法的时候,目标没有被保留。
- - removeTarget:action:forControlEvents:
在内部派发表中将特定事件的目标和动作移除
- (void)removeTarget:(id)target
action:(SEL)action
forControlEvents:(UIControlEvents)controlEvents
参数表
target |
目标对象—动作消息的发送对象,传入nil可以移除动作和指定控制事件的所有目标
|
action |
一个识别动作的选择器,出入NULL来移除所有的动作消息对
|
controlEvents |
|
返回所有跟动作事件和特殊指定控制事件相关的动作
- (NSArray *)actionsForTarget:(id)target
forControlEvent:(UIControlEvents)controlEvent
参数表
target |
目标对象—动作消息的发送对象,传入nil可以移除动作和指定控制事件的所有目标。你必须传入一个相匹配的明确目标,不要传入nil
|
controlEvent |
|
一个包含NSString类型的方法名字的数组或者没有与控制事件相关的方法则则为nil
返回与接受者相关联的所有目标对象
- (NSSet *)allTargets
集合里面的目标是动作消息的接受者,
返回与接受者相关联的所有控制事件
- (UIControlEvents)allControlEvents
存取方法控制属性
@property(nonatomic, readonly) UIControlState state
一个或者多个UIControlState位掩码常量来指定UIControl对象的状态
enum {
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,
当控件的值发生改变时,发送通知。用于滑块,分段控件,以及其他取值控件。
UIControlEventEditingDidBegin = 1 << 16,
文本控件开始编辑时发送通知
UIControlEventEditingChanged = 1 << 17,
文本控件中的内容被改变是发送通知
UIControlEventEditingDidEnd = 1 << 18,
文本控件结束编辑的时候发送通知
UIControlEventEditingDidEndOnExit = 1 << 19,
文本控件内通过按下回车(或等价行为)结束编辑时,发送通知。
UIControlEventAllTouchEvents = 0x00000FFF,
通知所有触摸事件
UIControlEventAllEditingEvents = 0x000F0000,
通知所有关于文本编辑的时间。
UIControlEventApplicationReserved = 0x0F000000,
为应用程序预留
UIControlEventSystemReserved = 0xF0000000,
为系统内部框架预留
UIControlEventAllEvents = 0xFFFFFFFF };
通知所有事件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)