自定义控件-UIControl

来源:互联网 发布:游戏破解编程 编辑:程序博客网 时间:2024/06/09 21:39
UIControl是控件的基类,例如:按钮,滑块等将用户的目的传递到应用程序中。UIContol不能直接的实例化,它只能通过继承的方式为子类提供公共的接口和动作结构。

UIControl的主要角色是定义一套接口和基础实现,为了当确定的事件发生的时候(比如点击了按钮)准备好动作消息(Action)并开始派发它们到自己的目标(Target,eg:UIViewController)。

UIControl类通常也包含多种设置和获取控件状态的方法-例如,决定一个控件是否使能或者高亮状态-和它定义了一些跟踪(在控件范围内)触摸事件的方法。这些跟踪方法可以被UIControl的子类所继承。

子类化注意事项

你想扩展一个UIControl子类可能是下面两个原因:
•通过特殊的事件(UIEvent)观察或者修改派发的动作消息(action)给目标(target).
实现方法,重载sendAction:to:forEvent:,评估传入的方法,目标对象,或者事件的位掩码,并按要求继续。
•提供自定义的跟踪行为(例如,改变高亮的外观)
实现方法,重载一个或者多个下面的方法:beginTrackingWithTouch:withEvent:continueTrackingWithTouch:withEvent:endTrackingWithTouch:withEvent:.


准备并发送动作消息
  • - 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

参数表
controlEvents

位掩码,其主标志指定发送哪个动作消息到控制事件
UIControl实现这个方法来发送所有controlEvents的动作消息,在进程中重复调用,查找目标和动作列表在addTarget:action:forControlEvents:.之前构造。



  • - 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
一个位掩码识别的,被消息动作发送的控制事件



  • - actionsForTarget:forControlEvent:
返回所有跟动作事件和特殊指定控制事件相关的动作

- (NSArray *)actionsForTarget:(id)target
              forControlEvent:(UIControlEvents)controlEvent


参数表
target

目标对象—动作消息的发送对象,传入nil可以移除动作和指定控制事件的所有目标。你必须传入一个相匹配的明确目标,不要传入nil
controlEvent
一个位掩码识别的被消息动作发送的控制事件
一个包含NSString类型的方法名字的数组或者没有与控制事件相关的方法则则为nil




  • - allTargets

返回与接受者相关联的所有目标对象

- (NSSet *)allTargets

集合里面的目标是动作消息的接受者,




  • - allControlEvents

返回与接受者相关联的所有控制事件
- (UIControlEvents)allControlEvents

一个或者多个UIControlEvents 常量指定与当前接受者相关联的的控制事件



存取方法控制属性

@property(nonatomic, readonly) UIControlState state

一个或者多个UIControlState位掩码常量来指定UIControl对象的状态

Control Events

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 };
通知所有事件



0 0