首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UI篇-自定义控件之基类UIControl

UI篇-自定义控件之基类UIControl

作者头像
進无尽
发布2018-09-12 18:05:45
1.4K0
发布2018-09-12 18:05:45
举报
文章被收录于专栏:進无尽的文章進无尽的文章

UIControl的意义所在

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

UIControl是控件的基类,不能直接的实例化,它只能通过继承的方式为子类提供公共的接口和动作结构。

UIControl事件实现原理

  • 比如我们有一个按钮,当他点击时候,我们执行ViewContollr的-(void)click:(id)sender方法,
  • 这里传入的UIControlEventTouchUpInside枚举量,就是在控件frame内按下,然后抬起这样一个事件,
  • UIContol将这个事件作为key,和目标(target)和目标方法(action)存到了自己私有的字典里。
  • 当用户点击按钮时,UIControl响应了触摸链的touchesEnded方法,便会根据私有字典,把对应UIControlEventTouchUpInside的目标(target)和目标方法(action)调用,这样完成事件的回传。

自定义控件可以怎样实现

  • 继承自UIView,这是大多数开发者的做法。也能够实现需求,但是一个可交互控件,理应继承于UIControl而非UIView。
  • 继承自UIControl,使用UIControl的一套接口规范来实现自定义。

UIControl的重要方法

Target模式就是从UIControl使用的。

  • 准备并发送动作消息 sendAction:to:forEvent: 响应给定的事件,转发一个动作消息给应用程序派发给目标。 - (void)sendAction:(SEL)`action` to:(id)`target` forEvent:(UIEvent*)`event` UIControl通过转发一个目标动作给单例UIApplication(在它的sendAction:to:fromSender:forEvent:方法中)来实现这个方法来派发给它的目标, 或者如果它没有确定的目标,派发给响应链中第一个愿意处理这个消息的对象中。 子类可能要重载这个方法来观察或者修改动作转发的行为。 每进行一次指定控件的事件,可能会重复用sendActionsForControlEvents这个方法的实现,
  • 发送动作消息到给定的控制事件 sendActionsForControlEvents - (void)sendActionsForControlEvents:(UIControlEvents *)controlEvents` UIControl实现这个方法来发送所有controlEvents的动作消息,在进程中重复调用, 查找目标和动作列表在`addTarget:action:forControlEvents:`.之前构造。
  • 在内部的派发表中给特殊时间添加一个目标和动作 addTarget:action:forControlEvents: - (void)addTarget:(id)`target` action:(SEL)`action` forControlEvents:(UIControlEvents)`controlEvents` 你可能会多次调用这个方法,并且你可能需要为一个特殊的事件识别多个目标-动作组, 动作消息可以是可选的包含发送者和事件作为参数 当你调用这个方法的时候,目标没有被保留。
  • 在内部派发表中将特定事件的目标和动作移除 removeTarget:action:forControlEvents:
  • 返回所有跟动作事件和特殊指定控制事件相关的动作 actionsForTarget:forControlEvent: - (NSArray *)actionsForTarget:(id)`target` forControlEvent:( UIControlEvents)`controlEvent` 一个包含NSString类型的方法名字的数组或者没有与控制事件相关的方法则则为nil
  • 返回与接受者相关联的所有目标对象 - (NSSet*)allTargets 集合里面的目标是动作消息的接受者,
  • 返回与接受者相关联的所有控制事件 - (UIControlEvents )allControlEvents 一个或者多个`UIControlEvents` 常量指定与当前接受者相关联的的控制事件
UIControlEvents枚举,定义了iOS交互中的交互方式
UIControlEventTouchDown    控件被按下去的事件
UIControlEventTouchDownRepeat  控件被重复点击的时间,点击次数超过一次
UIControlEventTouchDragInside  在控件范围内按下并拖动的事件
UIControlEventTouchDragOutside  在控件范围内按下并在控件外面拖动的事件
UIControlEventTouchDragEnter  从控件范围外拖动到控件范围内的事件
UIControlEventTouchDragExit  从控件范围外拖动到控件范围内的事件
UIControlEventTouchUpInside  点击控件后在控件范围内释放触发事件
UIControlEventTouchUpOutside  点击控件后在控件范围外释放触发事件
UIControlEventTouchCancel  触摸取消事件
UIControlEventValueChanged  当控件的值发生改变时,发送通知。用于滑块,分段控件,以及其他取值控件。
UIControlEventEditingDidBegin  文本控件开始编辑时发送通知
UIControlEventEditingChanged  文本控件中的内容被改变是发送通知
UIControlEventEditingDidEnd  文本控件结束编辑的时候发送通知
UIControlEventEditingDidEndOnExit  文本控件内通过按下回车(或等价行为)结束编辑时,发送通知。
UIControlEventAllTouchEvents  通知所有触摸事件
UIControlEventAllEditingEvents  通知所有关于文本编辑的时间。
UIControlEventApplicationReserved  为应用程序预留
UIControlEventSystemReserved  为系统内部框架预留
UIControlEventAllEvents  通知所有事件
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
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.01.17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • UIControl的意义所在
  • UIControl事件实现原理
  • 自定义控件可以怎样实现
  • UIControl的重要方法
    • UIControlEvents枚举,定义了iOS交互中的交互方式
      • UIControlState定义了控件的基本状态
      相关产品与服务
      腾讯云小微
      腾讯云小微,是一套腾讯云的智能服务系统,也是一个智能服务开放平台,接入小微的硬件可以快速具备听觉和视觉感知能力,帮助智能硬件厂商实现语音人机互动和音视频服务能力。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档