UIControl详解

UIControl控制对象,是UIButton,UIDatePicker,UIpageControl,UISegmentedControl,UITextField,UISlider,UISwitch的基类。你不能直接使用UIControl类来实例化控件。

UIControl的主要作用是创建相应的逻辑将action分发到对应的target,另外90%的情况下,它会根据自身的状态(例如Highlighted, Selected和Disabled等)来绘制用户界面。
通过UIControl,我们主要管理3个重要的任务:
(1)绘制用户界面
(2)跟踪用户的操作
(3)Target-Action模式

准备和发送操作消息:

1.针对一个给定事件,通知应用程序对象,让调用目标的指定行为方法:

- (void)sendAction:(SEL)action
                to:(id)target
          forEvent:(UIEvent *)event

2.执行与指定事件相关的行为方法:

- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents

如果设计了一个自定义控件类,可以使用sendActionsForControlEvent方法,为基本的UIControl事件或自己的自定义事件发送通知。例如,如果你的控件值正在发生变化,就可以发送相应通知,通过控件的代码可以指定时间目标,这个通知将被传播到这些指定的目标。例:

[ self sendActionsForControlEvents:UIControlEventValueChanged ];

3.为指定的控件添加事件:

- (void)addTarget:(id)target
           action:(SEL)action
 forControlEvents:(UIControlEvents)controlEvents
target表示要把消息发送到哪里,一般是self,通常值实例化控件对象的控制器;action是一个选择器,表示该事件需要响应的方法,事件做什么其实就写在这个方法里面;最后一个是事件类型,表示响应什么样的事件。


4.取消事件处理函数:

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

5.获取针对某一特定事件目标的全部动作列表:
- (NSArray *)actionsForTarget:(id)target
              forControlEvent:(UIControlEvents)controlEvent
例如:

NSArray* myActions = [ myControl actionForTarget:UIControlEventValueChanged ];  

6.取得关于一个控件所有指定动作的列表:

- (NSSet *)allTargets
要取得关于一个控件所有指定动作的列表,可以使用allTargets方法。这个方法返回一个NSSet,其中包含事件的完整列表:
NSSet* myActions = [myConreol allTargets ];  

7.返回控件响应的事件:

- (UIControlEvents)allControlEvents


获取和设置控件属性:

8.接收器的状态:

@property(nonatomic, readonly) UIControlState state

9.是否接受事件:

@property(nonatomic, getter=isEnabled) BOOL enabled
控件默认是启用的。要禁用控件,可以将enabled属性设置为NO,这将导致控件忽略任何触摸事件。被禁用后,控件还可以用不同的方式显示自己,比如变成灰色不可用。虽然是由控件的子类完成的,这个属性却存在于UIControl中。


10.控件选中状态:

@property(nonatomic, getter=isSelected) BOOL selected
当用户选中控件时,UIControl类会将其selected属性设置为YES。子类有时使用这个属性来让控件选择自身,或者来表现不同的行为方式。


11.当你的手指按下去,还没放的时候:

@property(nonatomic, getter=isHighlighted) BOOL highlighted
Highligted 和 Selected 是不同的状态,是不可以混用的,这些 UIControlState 是针对所有的 UIControl 定义的,但是实际上不是每个 UIControl 都会经历到这些个 State
基本的 State 变化过程如下:
(1).什么都没干的时候:Normal
(2).当你的手指按下去,还没放的时候:Highlighted
(3).当手指放开的时候:如果这个 UIControl 有 Selected 状态的话,就会变成: Selected
再重复上述过程一次,就会从 Selected->Highlighted-> Normal
但是普通的 UIButton 这个 UIControl 的 subclass,是没有 Selected 状态的,它就只有 Normal 和 Highlighted,只会在这两个状态间切换。(正常情况下,如果你设置了 disable 的话,还会变到 Disabled)


12.控件如何在垂直/水平方向上布置自身的内容:

@property(nonatomic) UIControlContentVerticalAlignment contentVerticalAlignment

@property(nonatomic) UIControlContentHorizontalAlignment contentHorizontalAlignment

默认是将内容顶端对其,对于文本字段,可能会改成UIControlContentVerticalAlignmentCenter。对于这个字段,可以使用下列诸值:

(1).UIControlContentVerticalAlignmentCenter  

(2).UIControlContentVerticalAlignmentTop  

(3).UIControlContentVerticalAlignmentBottom  

(4).UIControlContentVerticalAlignmentFill

水平方向

(1).UIControlContentHorizontalAlignmentCenter  

(2).UIControlContentHorizontalAlignmentTop  

(3).UIControlContentHorizontalAlignmentBottom  

(4).UIControlContentHorizontalAlignmentFill  



跟踪触摸和重绘制控件:

13.跟踪触摸,拦截用户自定义事件:

- (BOOL)beginTrackingWithTouch:(UITouch *)touch
                     withEvent:(UIEvent *)event

14.

- (BOOL)continueTrackingWithTouch:(UITouch *)touch
                        withEvent:(UIEvent *)event

15.

- (void)endTrackingWithTouch:(UITouch *)touches
                   withEvent:(UIEvent *)event

16.

- (void)cancelTrackingWithEvent:(UIEvent *)event

17.

@property(nonatomic, readonly, getter=isTracking) BOOL tracking

18.指示触摸是否在指示器的界限:

@property(nonatomic, readonly, getter=isTouchInside) BOOL touchInside


数据类型:

19.控制事件的枚举:

typedef NSUInteger UIControlEvents;

20.状态掩码类型:

typedef NSUInteger UIControlState;

常数:

21.控件可能的事件类型:

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 
};

22.内容垂直/水平对齐:

typedef enum {
   UIControlContentVerticalAlignmentCenter   = 0,
   UIControlContentVerticalAlignmentTop      = 1,
   UIControlContentVerticalAlignmentBottom   = 2,
   UIControlContentVerticalAlignmentFill     = 3,
} UIControlContentVerticalAlignment;

typedef enum {
   UIControlContentHorizontalAlignmentCenter  = 0,
   UIControlContentHorizontalAlignmentLeft     = 1,
   UIControlContentHorizontalAlignmentRight  = 2,
   UIControlContentHorizontalAlignmentFill    = 3,
} UIControlContentHorizontalAlignment;

23.控制状态:

enum {
   UIControlStateNormal                = 0,
   UIControlStateHighlighted           = 1 << 0,
   UIControlStateDisabled              = 1 << 1,
   UIControlStateSelected              = 1 << 2,
   UIControlStateApplication           = 0x00FF0000 ,
   UIControlStateReserved              = 0xFF000000 
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值