UIControl.h
2019-06-19 本文已影响0人
zhYx_
#if USE_UIKIT_PUBLIC_HEADERS || !__has_include(<UIKitCore/UIControl.h>)
//
// UIControl.h
// UIKit
//
// Copyright (c) 2005-2018 Apple Inc. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIView.h>
#import <UIKit/UIKitDefines.h>
NS_ASSUME_NONNULL_BEGIN
/* 手势类型 <位移枚举> */
typedef NS_OPTIONS(NSUInteger, UIControlEvents) {
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, /// 拖动或其他方式操纵控件,使其发出一系列不同的值
UIControlEventPrimaryActionTriggered NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 13, /// 按钮触发的语义动作
UIControlEventEditingDidBegin = 1 << 16, /// 触摸通过输入其边界在UITextField对象中启动编辑会话
UIControlEventEditingChanged = 1 << 17, /// 触摸使对象中的编辑更改
UIControlEventEditingDidEnd = 1 << 18, /// 触摸通过离开其边界来结束对象中的编辑会话
UIControlEventEditingDidEndOnExit = 1 << 19, /// 触摸结束对象中的编辑会话('返回键'结束编辑)
UIControlEventAllTouchEvents = 0x00000FFF, /// 所有触摸事件
UIControlEventAllEditingEvents = 0x000F0000, /// 对象的所有编辑触摸(UITextField)
UIControlEventApplicationReserved = 0x0F000000, /// application可使用的一系列控制事件值
UIControlEventSystemReserved = 0xF0000000, /// 为内部框架使用保留的一系列控制事件值
UIControlEventAllEvents = 0xFFFFFFFF /// 所有事件(包括系统事件)
};
/* 控件内部垂直对齐方式 <枚举> */
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, /// 填充对齐(图像可能会被拉伸)
UIControlContentHorizontalAlignmentLeading API_AVAILABLE(ios(11.0), tvos(11.0)) = 4, /// 动态左对齐(左侧语言习惯的从左到右对齐,右侧语言习惯的从右到左对齐)
UIControlContentHorizontalAlignmentTrailing API_AVAILABLE(ios(11.0), tvos(11.0)) = 5, /// 动态右对齐(左侧语言习惯的从右到左对齐,右侧语言习惯的从左到右对齐)
};
/* 控件状态 <位移枚举> */
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)
UIControlStateFocused NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 3, // Applicable only when the screen supports focus
UIControlStateApplication = 0x00FF0000, // additional flags available for application use
UIControlStateReserved = 0xFF000000 // flags reserved for internal framework use
};
@class UITouch;
@class UIEvent;
#pragma mark - 操控类
#pragma mark -
/*
概述:
- 控制类控件的基类,它是为响应用户交互而传达特定操作或意图的可视元素,不能直接使用UIControl类,他只是定义了子类都需要使用的方法
- 采用了一种新的事件处理机制,将前一节指节处理的触摸事件直接转换为简单操作,这样可以无需关心用户访问控件的具体方式;触摸事件到达UIControl对象(由响应链者派遣)后,在UIResponder的方法中(如:touchBegin:withEvent)中,UIControl将标准的触摸事件转换为特殊的控件事件,简单的理解就是,UIControl把复杂的触摸事件封装成了简单的易于使用的控件事件;例如通过UIControl对象处理后,按下按钮的事件就被封装成一个控件事件,而不用去判断触摸屏幕的整个操作过程
*/
NS_CLASS_AVAILABLE_IOS(2_0) @interface UIControl : UIView
/// 是否开启用户交互(默认YES)
@property(nonatomic,getter=isEnabled) BOOL enabled;
/// 是否处于选中状态(默认NO)
@property(nonatomic,getter=isSelected) BOOL selected;
/// 是否处于高亮状态(默认NO)
@property(nonatomic,getter=isHighlighted) BOOL highlighted;
/* 控件包含可配置文本或图像时此属性才有效 */
/// 控件内部垂直对齐方式(默认:UIControlContentVerticalAlignmentCenter)
@property(nonatomic) UIControlContentVerticalAlignment contentVerticalAlignment;
/// 控件内部水平对齐方式(默认:UIControlContentHorizontalAlignmentCenter)
@property(nonatomic) UIControlContentHorizontalAlignment contentHorizontalAlignment;
/// 控件内部水平对齐方式(动态水平对齐;详情参照此枚举注释)
@property(nonatomic, readonly) UIControlContentHorizontalAlignment effectiveContentHorizontalAlignment;
/// 控件状态(可以多种状态并存)
@property(nonatomic,readonly) UIControlState state;
/// 是否正在追踪触摸事件
@property(nonatomic,readonly,getter=isTracking) BOOL tracking;
/// 追踪的触摸事件是否在控件范围内(仅在tracking为YES时有效)
@property(nonatomic,readonly,getter=isTouchInside) BOOL touchInside; // valid during tracking only
// 追踪触摸事件开始时调用(如果继续跟踪返回YES,否则返回NO)
- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(nullable UIEvent *)event;
// 追踪触摸事件更新时调用
- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(nullable UIEvent *)event;
// 追踪触摸事件结束时调用(如果调用了- cancelTrackingWithEvent:可能不会调用此方法)
- (void)endTrackingWithTouch:(nullable UITouch *)touch withEvent:(nullable UIEvent *)event;
// 追踪触摸事件取消时调用
- (void)cancelTrackingWithEvent:(nullable UIEvent *)event;
/**
控件添加点击事件(可以多次调用此方法,添加多个操作)
@param target 添加监听者(一般为self)
@param action 封装一个执行方法(@selector(方法名);方法必须实现,否则会Crash)
@param controlEvents 控制事件(哪种手势触发)
*/
- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
// 删除点击事件
- (void)removeTarget:(nullable id)target action:(nullable SEL)action forControlEvents:(UIControlEvents)controlEvents;
// 获取所有的 点击事件 和 触发手势
#if UIKIT_DEFINE_AS_PROPERTIES
@property(nonatomic,readonly) NSSet *allTargets;
@property(nonatomic,readonly) UIControlEvents allControlEvents;
#else
- (NSSet *)allTargets;
- (UIControlEvents)allControlEvents;
#endif
// 查找指定对象和手势后所包含的操作方法
- (nullable NSArray<NSString *> *)actionsForTarget:(nullable id)target forControlEvent:(UIControlEvents)controlEvent;
// 调用指定的操作方法
- (void)sendAction:(SEL)action to:(nullable id)target forEvent:(nullable UIEvent *)event;
// 调用与指定手势关联的所有方法
- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents;
@end
NS_ASSUME_NONNULL_END
#else
#import <UIKitCore/UIControl.h>
#endif