[iOS]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.

    UIControlEventPrimaryActionTriggered NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 13,     // semantic action: for buttons, 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

};


UIControlEvents一般在addTarget方法中使用,一般都使用TouchUpInside方法来表示单击事件。




typedef NS_ENUM(NSInteger, UIControlContentVerticalAlignment) {

    UIControlContentVerticalAlignmentCenter  = 0,

    UIControlContentVerticalAlignmentTop     = 1,

    UIControlContentVerticalAlignmentBottom  = 2,

    UIControlContentVerticalAlignmentFill    = 3,

};


typedef NS_ENUM(NSInteger, UIControlContentHorizontalAlignment) {

    UIControlContentHorizontalAlignmentCenter = 0,

    UIControlContentHorizontalAlignmentLeft   = 1,

    UIControlContentHorizontalAlignmentRight  = 2,

    UIControlContentHorizontalAlignmentFill   = 3,

};


内容的位置,很少用到,因为继承自它的空间都有自己的位置方法




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)

#ifndef SDK_HIDE_TIDE

    UIControlStateFocused NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 3, // Applicable only when the screen supports focus

#endif

    UIControlStateApplication  = 0x00FF0000,              // additional flags available for application use

    UIControlStateReserved     = 0xFF000000               // flags reserved for internal framework use

};


控件的状态,高亮之类,可用在button的setimage forstate方法等。



@property(nonatomic,getter=isEnabled) BOOL enabled;                                  // default is YES. if NO, ignores touch events and subclasses may draw differently

@property(nonatomic,getter=isSelected) BOOL selected;                                // default is NO may be used by some subclasses or by application

@property(nonatomic,getter=isHighlighted) BOOL highlighted;                          // default is NO. this gets set/cleared automatically when touch enters/exits during tracking and cleared on up

@property(nonatomic) UIControlContentVerticalAlignment contentVerticalAlignment;     // how to position content vertically inside control. default is center

@property(nonatomic) UIControlContentHorizontalAlignment contentHorizontalAlignment; // how to position content hozontally inside control. default is center


@property(nonatomic,readonly) UIControlState state;                  // could be more than one state (e.g. disabled|selected). synthesized from other flags.

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

@property(nonatomic,readonly,getter=isTouchInside) BOOL touchInside; // valid during tracking only



这些属性都是字面意思,不难理解




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

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

- (void)endTrackingWithTouch:(nullable UITouch *)touch withEvent:(nullable UIEvent *)event; // touch is sometimes nil if cancelTracking calls through to this.

- (void)cancelTrackingWithEvent:(nullable UIEvent *)event;   // event may be nil if cancelled for non-event reasons, e.g. removed from window




这些方法和UIResponder的touchesBegan一系列方法差不多,具体差别我没有找到,如果有知道的希望告知。


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


// remove the target/action for a set of events. pass in NULL for the action to remove all actions for that target

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



这两个方法是最常用的,代码写控件的时候添加点击方法一般就用addTarget



- (NSSet *)allTargets;                                                                     // set may include NSNull to indicate at least one nil target

- (UIControlEvents)allControlEvents;                                                       // list of all events that have at least one action



获得所有的target和ControlEvents

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值