UIButton 继承树

继承树

UIButton -> UIControl -> UIView -> UIResponder -> NSObject

UIKit

NSObject

所有 Objective-C 对象的基类,封装了内存管理,消息的传递机制等底层逻辑。

UIResponder

UIResponder 定义了响应和处理事件的接口。它是 UIApplication 和 UIView 的父类,而 UIView 则是 UIWindow 的父类。

有两种一般事件:

  • 点击事件(Touche Events)
  • 手势事件(Motion Events)

除此之外还有:

  • 远程控制事件(Remote Control Events)
  • 重压事件(Press Events)(iOS 9.0 3D Touch)

点击 事件的主要处理方法有:

  • touchesBegan:withEvent:
  • touchesMoved:withEvent:
  • touchesEnded:withEvent:
  • touchesCancelled:withEvent:.

iOS 3.0 引入了 手势 事件,特别是摇一摇。

iOS 4.0 增加了远程控制事件,包括控制中心和耳机线控:

iOS 控制中心

UIView

UIView 定义了一个屏幕上的矩形区域,以及管理这个区域内容的接口。UIView 提供了一个基本行为就是为这个矩形区域填充背景色(Background Color)。

UIControl

UIControl 是 UIButton,UISwitch,UITextField 以及 UISegmentedControl 等类的父类。

不要使用 UIControl 的实例,而是写 UIControl 的子类。

UIControl 子类的主要工作就是将 UIResponder 收集到的复杂事件,变成简单的控制事件(UIControl Events)。而为了实现这个过程,UIControl 引入了 Target-Action 机制。

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

此外,UIControl 还定义了状态 UIControlState。

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

UIButton

UIButton 将 UIResponder 接受的 Events 处理成简单事件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 好奇触摸事件是如何从屏幕转移到APP内的?困惑于Cell怎么突然不能点击了?纠结于如何实现这个奇葩响应需求?亦或是...
    Lotheve阅读 59,201评论 51 604
  • 在开发过程中,大家或多或少的都会碰到令人头疼的手势冲突问题,正好前两天碰到一个类似的bug,于是借着这个机会了解了...
    闫仕伟阅读 10,881评论 2 23
  • 在iOS开发中经常会涉及到触摸事件。本想自己总结一下,但是遇到了这篇文章,感觉总结的已经很到位,特此转载。作者:L...
    WQ_UESTC阅读 11,321评论 4 26
  • 7、不使用IB是,下面这样做有什么问题? 6、请说说Layer和View的关系,以及你是如何使用它们的。 1.首先...
    AlanGe阅读 4,447评论 0 1
  • iOS中有三类事件:UIEventTypeTouches触摸事件、 UIEventTypeMotion “动作”事...
    WeiHing阅读 37,332评论 7 69

友情链接更多精彩内容