自定义控件-UIControl

2023-05-16

UIControl是控件的基类,例如:按钮,滑块等将用户的目的传递到应用程序中。UIContol不能直接的实例化,它只能通过继承的方式为子类提供公共的接口和动作结构。
UIControl的主要角色是定义一套接口和基础实现,为了当确定的事件发生的时候(比如点击了按钮)准备好动作消息(Action)并开始派发它们到自己的目标(Target,eg:UIViewController)。
UIControl类通常也包含多种设置和获取控件状态的方法-例如,决定一个控件是否使能或者高亮状态-和它定义了一些跟踪(在控件范围内)触摸事件的方法。这些跟踪方法可以被UIControl的子类所继承。
子类化注意事项
你想扩展一个UIControl子类可能是下面两个原因:
•通过特殊的事件(UIEvent)观察或者修改派发的动作消息(action)给目标(target).
实现方法,重载sendAction:to:forEvent:,评估传入的方法,目标对象,或者事件的位掩码,并按要求继续。
•提供自定义的跟踪行为(例如,改变高亮的外观)
准备并发送动作消息
  • - sendAction:to:forEvent:
响应给定的事件,转发一个动作消息给应用程序派发给目标。
- (void)sendAction:(SEL)action
                to:(id)target
          forEvent:(UIEvent *)event

参数表

action
选择器识别的消息,它不能为空
target
目标对象—动作消息发送的对象,如果为空,接受对象遍历响应链并发送动作消息给第一个愿意影响的对象
event
一个代表事件的对象(在UIControl中很常见)它产出动作消息。事件可以是空的如果动作直接被调用而不是需要通过一个事件生成。例如,一个值改变消息可能是因为程序执行的结果,而不是用户触摸的结果
UIControl通过转发一个目标动作给单例UIApplication(在它的sendAction:to:fromSender:forEvent:方法中)来实现这个方法来派发给它的目标,或者如果它没有确定的目标,派发给响应链中第一个愿意处理这个消息的对象中。子类可能要重载这个方法来观察或者修改动作转发的行为。每进行一次指定控件的事件,可能会重复用sendActionsForControlEvents:这个方法的实现,
  • - sendActionsForControlEvents:
发送动作消息到给定的控制事件
- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents
参数表
controlEvents
位掩码,其主标志指定发送哪个动作消息到控制事件
UIControl实现这个方法来发送所有controlEvents的动作消息,在进程中重复调用,查找目标和动作列表在addTarget:action:forControlEvents:.之前构造。
  • - addTarget:action:forControlEvents:
在内部的派发表中给特殊时间添加一个目标和动作
- (void)addTarget:(id)target
           action:(SEL)action
 forControlEvents:(UIControlEvents)controlEvents
参数表
target
目标对象-动作消息的发送对象,如果它为空,那么将会搜索响应链中愿意响应这个动作消息的对象
action
一个选择器识别的动作消息,它不能为空
controlEvents
一个位掩码识别的被消息动作发送的控制事件
你可能会多次调用这个方法,并且你可能需要为一个特殊的事件识别多个目标-动作组,动作消息可以是可选的包含发送者和事件作为参数
当你调用这个方法的时候,目标没有被保留。
  • - removeTarget:action:forControlEvents:
在内部派发表中将特定事件的目标和动作移除
- (void)removeTarget:(id)target
              action:(SEL)action
    forControlEvents:(UIControlEvents)controlEvents
参数表
target
目标对象—动作消息的发送对象,传入nil可以移除动作和指定控制事件的所有目标
action
一个识别动作的选择器,出入NULL来移除所有的动作消息对
controlEvents
一个位掩码识别的,被消息动作发送的控制事件
返回所有跟动作事件和特殊指定控制事件相关的动作
- (NSArray *)actionsForTarget:(id)target
              forControlEvent:(UIControlEvents)controlEvent
参数表
target
目标对象—动作消息的发送对象,传入nil可以移除动作和指定控制事件的所有目标。你必须传入一个相匹配的明确目标,不要传入nil
controlEvent
一个位掩码识别的被消息动作发送的控制事件
一个包含NSString类型的方法名字的数组或者没有与控制事件相关的方法则则为nil
  • - allTargets
返回与接受者相关联的所有目标对象
- (NSSet *)allTargets
集合里面的目标是动作消息的接受者,
  • - allControlEvents
返回与接受者相关联的所有控制事件
- (UIControlEvents)allControlEvents
一个或者多个UIControlEvents 常量指定与当前接受者相关联的的控制事件
存取方法控制属性
@property(nonatomic, readonly) UIControlState state
一个或者多个UIControlState位掩码常量来指定UIControl对象的状态
Control Events
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 };
通知所有事件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义控件-UIControl 的相关文章

  • UI----UIslider 和UIcontrol的属性

    UISlide 属性 minimumValue 当值可以改变时 xff0c 滑块可以滑动到最小位置的值 xff0c 默认为 0 0 slider minimumValue 61 10 0 maximumValue 当值可以改变时 xff0c
  • 控件:UIControl 我在UITextFiled输入事件调用到

    下列事件为基类UIControl所支持 xff0c 除非另有说明 xff0c 也适用于所有控件 UIControlEventTouchDown 单点触摸按下事件 xff1a 用户点触屏幕 xff0c 或者又有新手指落下的时候 UIContr
  • 自定义控件sizechange问题

    自定义一个控件的时候 xff0c 放在容器里面 xff0c 显示后 xff0c 容器大小怎么改变没有异常 xff0c 但是如果把一个自定义控件放到另一个自定义控件的时候 xff0c 就有这样的问题 xff0c 就是自定义控件2成为了自定义控
  • ASP.NET 自定义控件 自定义属性的使用

    最近在给公司一个老的ASP平台进行改版 xff0c 由于这个平台运行时间太长 xff0c 期间有很多程序员进行过修改 xff0c 导致数据库显得很乱 在实际改版时架构采用了多层架构 xff0c 引入工厂模式 xff0c 面向接口 对于资讯类
  • WaterView 自定义圆形水波进度

    这几天不是很忙 完成了工作 利用闲暇的时间来完成一下以前不会玩的自定义动画 自定义圆形水波进度 这个以前把我难死了 死活不会 都怪自己太菜了 那么现在来看看到底难不难 真正最简单的实现方法 先来了解下path类的基本方法 移动起点 move
  • QT自定义Tab标签页,可以删除、添加、修改和选中

    先看效果 部分源码 pragma once include
  • WPF 使用自定义控件(custom control),资源字典(ResourceDictionary),用户控件(user control),及之间的对比

    最近使用WPF比较多 过来记录一下 对比一下 个人理解usercontrol比较适用于组合控件 比如你想要实现的控件是由多个控件组成的 customCcontrol主要是用来单独重绘控件 如button datagrid lable等 cu
  • 关于app退出的问题,完美退出方式

    实际开发中会有很多关于app的退出问题 我个人比较常见的有两种 一 双击退出 比如说我们在首页的时候需要一个双击退出的方法 点击第一次手机的返回键时提示 再点一次退出应用 之类的话语 我们可以这样做 对重写onKeyDown方法 当他第一次
  • Android实现裁剪

    Android自定义View实现图片缩放旋转移动裁剪 灰信网 软件开发博客聚合 freesion com SuppressLint AppCompatCustomView public class CorpToView extends Im
  • C#System.ArgumentException

    C 自定义控件GDI绘制在主程序报错System ArgumentException 我的绘制图片内容大概如下 private Bitmap backGroundImage null private Bitmap prospectImage
  • Qt自定义图片按钮并设置方向

    Qt自定义图片按钮 设置方向 虽然Qt定义了很多很多控件 但是还是不能满足用户的需要 比如如果想使用ToolButton 需要带文字 又需要文字可以设定位置 显然就不行了 下面的代码就是一个简单的实现ToolButton功能 并且能够设置图
  • 始终显示 AVPlayer 控件

    我有一个 AVPlayerViewController 里面有一个 AVPlayer 我需要的是播放器的控件 播放 暂停 时间滑块 永远不会隐藏 现在 在播放视频大约 4 秒后 它们就会隐藏起来 您必须点击屏幕才能再次显示它们 我无法找到解
  • 回调函数抛出意外的“不一致的参数”错误

    我正在使用 GNU Octave 版本 4 4 1 我正在尝试通过包含两个滑块来制作简单振荡器的交互式绘图 这两个滑块将允许更改初始速度和振荡器质量 绘图本身以及带有一个滑块 用于速度 的脚本都显示良好 这是带有回调函数的脚本的一部分 fu
  • UIControl 未接收触摸

    我有一个 UIControl 它实现了 Touchs Begin 方法 如下所示 void touchesBegan NSSet touches withEvent UIEvent event super touchesBegan touc
  • 在自定义 UIControl 对象中定义自定义触摸区域

    我正在创建一个自定义 UIControl 对象 详细信息here http www thinkandbuild it how to build a custom control in ios 除了触摸区域外 一切都运行良好 我想找到一种方法
  • 检测 calloutAccessoryControlTapped 仅右侧的点击 CalloutAccessoryView

    My calloutAccessoryControlTapped当我点击注释视图时也会调用这种行为是对的 https stackoverflow com questions 36432782 why calloutaccessorycont
  • 如何在 Swift 中实现范围滑块

    我正在尝试实现范围滑块 并且使用了名为的自定义控件NMR范围滑块 https www cocoacontrols com controls nmrangeslider 但是当我使用它时 滑块根本不出现 难道也是因为它都是用 Objectiv
  • 为什么新的 iOS 14 UIControl 操作语法如此糟糕?

    iOS 14 中的新增功能 我们可以将操作处理程序直接附加到 UIControl let action UIAction title action in print howdy button addAction action for tou
  • 在 GUI MATLAB 中为静态文本赋值

    如何在 MATLAB GUI 中为静态文本赋值 双击指南中的文本打开属性编辑器 然后编辑 String 财产 您还可以设置 Tag 属性 以便您可以在 GUI 运行时对其进行编辑 如果您将标签设置为mytext 您可以将静态文本更改为 My
  • UITextFieldDelegate 与 UITextField 控件事件

    如果我想处理 UITextField 的更改 例如用户在其中键入 看起来这可以通过将委托分配给该文本字段 然后让委托实现 shouldChangeCharactersInRange 来完成 或者通过将目标添加到文本字段并处理 UIContr

随机推荐