首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

重写UIControl中的isEnabled以仍然允许触摸

是指在iOS开发中,自定义控件的isEnabled属性,使其在禁用状态下仍然可以接收用户的触摸事件。

在重写isEnabled属性时,可以通过以下步骤实现:

  1. 创建一个继承自UIControl的子类,例如CustomControl。
  2. 在CustomControl类中重写isEnabled属性的setter和getter方法。
  3. 在setter方法中,根据isEnabled的值来设置控件的交互状态和外观样式。如果isEnabled为true,表示控件可用,可以接收触摸事件;如果isEnabled为false,表示控件禁用,不接收触摸事件。
  4. 在getter方法中,返回isEnabled的值。

下面是一个示例代码:

代码语言:txt
复制
import UIKit

class CustomControl: UIControl {
    override var isEnabled: Bool {
        didSet {
            // 根据isEnabled的值设置控件的交互状态和外观样式
            if isEnabled {
                // 控件可用时的样式
                self.alpha = 1.0
                self.isUserInteractionEnabled = true
            } else {
                // 控件禁用时的样式
                self.alpha = 0.5
                self.isUserInteractionEnabled = false
            }
        }
    }
}

在上述示例中,重写了isEnabled属性的setter方法,根据isEnabled的值设置了控件的透明度和交互状态。当isEnabled为true时,控件的透明度为1.0,可以接收触摸事件;当isEnabled为false时,控件的透明度为0.5,不接收触摸事件。

这样,通过使用自定义的CustomControl类,并设置isEnabled属性,就可以实现在禁用状态下仍然允许触摸的效果。

推荐的腾讯云相关产品:腾讯云移动应用分析(MTA),该产品提供了移动应用数据分析的能力,可以帮助开发者深入了解用户行为和应用性能,优化用户体验和产品功能。产品介绍链接地址:https://cloud.tencent.com/product/mta

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS 事件响应

响应链-方法调用 ParentView是TapTestView父 View,TapTestView没有重写touchesBegan 方法,在ParentViewtouchesBegan 方法打上断点...UIControl 事件通知方式 UIControl作为UIResponder派生类,其也具有UIResponder touch系列四个方法,但其内部对这四个方法进行了重写,在 touchBegin...UIControl重写touch系列四个方法时,其方法内部不会调用父类方法,也就意味着UIControl对事件响应进行了阻断,使事件不会流向nextResponder。...UIButton 会截断响应链事件传递,也可以利用响应链来寻找 Action Method。 2. UIGestureRecognizer 仍然会先于 UIControl 接收到触摸事件; 3...., in view: UIView) -> Bool // 在UIScrollView子类重写该方法,用于返回是否取消已经传递给子视图事件,默认当子视图是UIControl时返回NO,否则返回YES

2.7K11

UIControl-IOS开发

这些控件基类均是UIControl,而UIControl派生自UIView类,所以每一个控件都有非常多视图特性,包含附着于其它视图能力。全部 控件都拥有一套共同属性和方法。...所以学习控件,我们先学习UIControl 属性 enabled 控件默认是启用。要禁用控件,能够将enabled属性设置为NO,这将导致控件忽略不论什么触摸事件。...被禁用后,控件还能够用不同方式显示自己,比方变成灰色不可用。尽管是由控件子类完毕,这个属性却存在于UIControl。...下列事件为基类UIControl所支持,除非另有说明,也适用于全部控件 UIControlEventTouchDown 单点触摸按下事件:用户点触屏幕,或者又有新手指落下时候。...UIControlEventEditingChanged 当文本控件文本被改变时发送通知。

57520
  • iOS14开发-触摸与手势识别

    事件传递 当 iOS 程序中发生触摸事件后,系统会将事件加入到 UIApplication 管理一个任务队列。 UIApplication 取出最前面的事件传递给 UIWindow。...此时需要重写 UITabBar point方法,判断当前触摸位置是否在中间凸起按钮坐标范围内,如果在返回 true。这样可以让触摸事件传递到凸起按钮,并让其成为最佳响应者。...(默认操作) (2)拦截,事件不再往上传递,重写touchesBegan方法,但不调用父类touchesBegan方法。...响应者对于触摸事件响应和传递都是在touchesBegan方法完成。该方法默认是将事件顺着响应者链向上传递,即将事件交给上一个响应者进行处理。...继承自 UIControl UIView 都可以通过 Target-Action 方式添加事件,如果同时给它们添加手势识别, 则 Target-Action 行为会失效,因为手势识别的优先级更高。

    2.3K20

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

    UIControl意义所在 UIControl主要角色是定义一套接口和基础实现,为iOS的人机交互制定了一系列标准, 为了当确定事件发生时候(比如点击了按钮)准备好动作消息(Action)...当用户点击按钮时,UIControl响应了触摸touchesEnded方法,便会根据私有字典,把对应UIControlEventTouchUpInside目标(target)和目标方法(action...继承自UIControl,使用UIControl一套接口规范来实现自定义。 UIControl重要方法 Target模式就是从UIControl使用。...UIApplication(在它sendAction:to:fromSender:forEvent:方法)来实现这个方法来派发给它目标, 或者如果它没有确定目标,派发给响应链第一个愿意处理这个消息对象...UIControlEventAllTouchEvents 通知所有触摸事件 UIControlEventAllEditingEvents 通知所有关于文本编辑时间。

    1.5K20

    iOS UITextField详解

    ; 文本缩放 //设置为YES时文本会自动缩小适应文本窗口大小.默认是保持原来大小,而让长文本滚动 textFied.adjustsFontSizeToFitWidth = YES; //设置自动缩小显示最小字体大小...return YES; } 重写绘制行为 除了UITextField对象风格选项,你还可以定制化UITextField对象,为他添加许多不同重写方法,来改变文本字段显示行为。...这些方法都会返回一个CGRect结构,制定了文本字段每个部件边界范围。以下方法都可以重写。...)textFieldShouldClear:(UITextField *)textField{ //返回一个BOOL值指明是否允许根据用户请求清除内容 //可以设置在特定条件下才允许清除内容...这个单词意思就明白这个方法了 return YES; } ``` ### 通知 UITextField派生自UIControl,所以UIControl通知系统在文本字段也可以使用

    1.8K30

    当iOS遇见UI

    假如向界面设计文件添加了一个按钮(UIButton),由于UIButton继承了UIControl基类,因此,可以在Xcode属性检查器面板中看到如图1所示UIControl属性设置面板。...图1 UIControl属性设置面板 有些时候,如果需要定制用户触碰UIControl控件时外观,则可以通过重写UIControl控件的如下方法实现。...- beginTrackingWithTouch:withEvent::当用户开始触碰该UIControl控件时,将会自动激发该方法,重写该方法即可在用户开始触碰该UIControl时定制该控件外观。...- continueTrackingWithTouch:withEvent::当用户连续触碰该UIControl控件时,将会自动激发该方法,重写该方法即可在用户连续触碰该UIControl时定制该控件外观...- endTrackingWithTouch:withEvent::当用户结束触碰该UIControl控件时,将会自动激发该方法,重写该方法即可在用户结束触碰该UIControl时定制该控件外观。

    74010

    【iOS 开发】基本 UI 控件详解 (UIButton | UITextField | UITextView | UISwitch)

    UIControl 介绍 (1) UIControl 简介 UIControl 简介 :  -- 使用频率 : UIControl 控件一般不会被使用, 经常被使用UIControl 子类 UI...控件是否可用; -- selected : 该属性判断该 UIControl 控件是否被选中; -- highlighted : UIControl 控件是否高亮; (5) UIControl 触摸方法...UIControl 常用触摸方法 :  -- "beginTrackingWithTouch : withEvent :" 方法 : 开始触摸 UIControl 控件时会回调该方法; -- "continueTrackingWithTouch...: withEvent :" 方法 : 连续触摸 UIControl 控件时会激发该方法; -- "endTrackingWithTouch : withEvent :" 方法 : 结束碰触 UIControl...触摸背景关闭虚拟键盘 (1) 修改 Custom Class  修改背景类别 :  -- 修改原因 : 默认背景控件时 UIView, 该控件没有 IBAction 事件, 因此需要将背景控件设置为

    6.7K20

    iOS-UITextField 全面解析iOSUITextField 使用全面解析UITextField代理方法通知UITextField 在storyboard 设置属性

    UITextField继承自UIControl,此类属性 text.contentVerticalAlignment = UIControlContentVerticalAlignmentTop...除了UITextField对象风格选项,你还可以定制化UITextField对象,为他添加许多不同重写方法,来改变文本字段显示行为。...return NO; } - (BOOL)textFieldShouldClear:(UITextField *)textField{ //返回一个BOOL值指明是否允许根据用户请求清除内容 //可以设置在特定条件下才允许清除内容...,所以UIControl通知系统在文本字段也可以使用。...2、Placeholder : 可以在文本框显示灰色字,用于提示用户应该在这个文本框输入什么内容。当这个文本框输入了数据时,用于提示灰色字将会自动消失。

    7.1K60

    iOS小技能: Target-Action设计模式运用

    控制对象是UIControl(iOS)或NSControl(OSX)子类实例。 其中一个对象保存着事件发生时向另一个对象发送所需信息。...II 应用案例 2.1 实现Click事件全埋点 方案一:【通过Method Swizzling交换UIApplication类-sendAction:to:from:forEvent:方法,然后在交换后方法触发...对于方案二:由于SDK为控件添加了一个默认触发类型Action,因此,如果开发者在开发过程中使用UIControlallTargets或者allControlEvents属性进行逻辑判断,有可能会引入一些无法预料问题.../article/details/117352527 在项目开发,会对数据库数据进行更新操作接口请求,不仅服务器侧需要控制请求频率以及保证数据唯一性和一致性,app侧也需要进行限制来避免测试垃圾数据...iOS触摸事件:什么是响应者链?

    81320

    【IT领域新生必看】多态优点:揭开面向对象编程神秘面纱

    在面向对象编程,多态性允许我们用一种统一方式来操作不同对象。这种统一操作能力,使得代码更加灵活和可扩展。...方法重载 方法重载是指在同一个类允许存在多个方法,它们方法名相同但参数列表不同。这些方法可以有不同返回类型。方法重载主要目的是为了增强程序灵活性和可读性。...方法重写 方法重写是指子类重新定义父类方法。通过方法重写,子类可以根据需要修改父类方法实现,而不是完全依赖父类实现。方法重写主要目的是为了实现具体类特定行为。...,它通过允许对象在不同上下文中表现出不同行为,使得代码更加灵活、可扩展和可维护。...无论是通过方法重载实现编译时多态性,还是通过方法重写实现运行时多态性,多态都在软件开发扮演着至关重要角色。 通过理解和应用多态性,开发者可以编写更通用、更高效代码,提升软件质量和可维护性。

    7710

    WPF 按钮 Button IsEnabled 属性对 WindowChrome IsHitTestVisibleInChrome 影响

    本文来告诉大家按钮 Button IsEnabled 属性对 WindowChrome IsHitTestVisibleInChrome 影响 在 WPF 默认交互是点击标题栏时候,如果是双击标题栏...而如果在标题栏放一个按钮,此时按钮默认是没有收到点击,详细请看 WPF 非客户区触摸和鼠标点击响应 如果想要让按钮能收到点击,需要使用 WPF 非客户区触摸和鼠标点击响应 方法,让 WPF 按钮加上...此时双击标题栏按钮不会让窗口最大化,但如果此时按钮设置 IsEnabled=”False” 那么此时双击将依然让窗口最大化 而有趣是如果在按钮 A 设置了 WindowChrome.IsHitTestVisibleInChrome...尽管第一个按钮是覆盖整个窗口大小,同时设置了 WindowChrome.IsHitTestVisibleInChrome 属性,但是被第二个按钮覆盖地方,双击标题栏会让窗口全屏 因此在 WPF ,...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后作品务必相同许可发布。

    1.6K30

    WPF 高速书写 StylusPlugIn 原理 添加 StylusPlugIn 到输入迁移 StylusPlugInCollection 方法使用 StylusPlugIn

    本文告诉大家 WPF StylusPlugIn 为什么能做高性能书写,在我上一篇博客和大家介绍了 WPF 触摸原理,但是没有详细告诉大家如何通过触摸原理知道如何去做一个高速获得触摸应用,所以本文就在上一篇博客基础继续告诉大家底层原理...主线程卡住了 主线程没有全力处理触摸笔迹 路由事件本身耗时 元素多了路由事件就需要经过很多元素 在用户触摸屏幕时候,会在 PenThreadWorker.ThreadProc...,重写时候就会发现,可以重写上面的几个方法,在 StylusPlugIn 类 OnStylusDown 三个方法都是虚方法 protected virtual void OnStylusDown...如果一个元素使用了 StylusPlugIn 会在触摸时候最快获得触摸信息,而不需要等待路由事件。...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后作品务必相同许可发布。

    68820

    WPF 高速书写 StylusPlugIn 原理

    本文告诉大家 WPF StylusPlugIn 为什么能做高性能书写,在我上一篇博客和大家介绍了 WPF 触摸原理,但是没有详细告诉大家如何通过触摸原理知道如何去做一个高速获得触摸应用,所以本文就在上一篇博客基础继续告诉大家底层原理...主线程卡住了 主线程没有全力处理触摸笔迹 路由事件本身耗时 元素多了路由事件就需要经过很多元素 在用户触摸屏幕时候,会在 PenThreadWorker.ThreadProc...,重写时候就会发现,可以重写上面的几个方法,在 StylusPlugIn 类 OnStylusDown 三个方法都是虚方法 protected virtual void OnStylusDown...重写 InsertItem 函数 这个函数有一个很重要是,虽然在使用 StylusPlugIn 是在另一个线程,但是在添加到元素时候必须在主线程,因为在 InsertItem 第一句就是判断元素是否在这个线程可以拿到...如果一个元素使用了 StylusPlugIn 会在触摸时候最快获得触摸信息,而不需要等待路由事件。

    52010

    如何用UIKit做一个转轮(3)

    你会从左侧触摸这个圆,按顺时针方向转,所以0弧度应该在左侧。下面的图片显示了你这个方案八个扇区角度和弧度值。 ? 黑色小点代表每个扇区在弧度上中间点。...在SMRotaryWheel.h,添加一个新属性property: @property CGAffineTransform startTransform; 当用户触摸组件时会用来存储转换差。...在SMRotaryWheel.mrotate方法下边重写这个方法: 注意:如果你选择是扩展UIView而不是UIControl,这个要重写方法是touchesBegan:touches withEven...,然后计算触摸点和容器container中心点差。...这些会在组件抛出每一次拖拽事件实现,在beginTrackingWithTouch方法下边增加这个重写函数continueTrackingWithTouch: 注意:如果你继承自UIView,需重写方法是

    78910

    UIScrollView

    ,然后再返回一个布尔值 @property(nonatomic) BOOL bounces; //11.如果这个属性被设置成YES而且bounces值是YES,垂直拖动是允许内容,即使小鱼滚动视图边界...NO,ScollView本身不处理这个消息,全部交给子视图处理 @property(nonatomic) BOOL canCancelContentTouches; //28.自定义默认行为,当手指触摸在显示内容由子类重写...如果它从这种方法受到NO便停止拖动和转发触摸时间内容子视图。.../34.缩小到特定区域内容,所以它是在接收器可见 - (void)zoomToRect:(CGRect)rect animated:(BOOL)animated NS_AVAILABLE_IOS(...代理方法:方法名一般是控件名开头,比如UIScrollView代理方法一般scrollView开头 如何监听控件行为 通过addTarget: 只有继承自UIControl控件,才有这个功能

    1.8K60

    IOS开发系列——UIView专题之四:事件分发机制篇【整理,部分原创】

    iOS,hit-Testing作用就是找出这个触摸点下面的View是什么,HitTest会检测这个点击点是不是发生在这个View上,如果是的话,就会去遍历这个Viewsubviews,直到找到最小能够处理事件...来一个简单图说明一下 假设我们现在点击到了图中E,hit-testing将进行如下步骤检测(不包含重写hit-test并且返回非默认View情况) 1、触摸点在ViewA内,所以检查ViewA...subview,所以ViewE属于ViewA包含这个点最小单位,所以ViewE变成了该次触摸事件hit-Test View; 4.1.2注意点 1、默认hit-testing顺序是按照UIView...= NO, enabled=NO(UIControl),或者alpha<=0.01, hidden等情况时候,hitTest就不会调用自己pointInside了,直接返回nil,然后系统就回去遍历兄弟节点...处理事件,我们则需要重写如下几个方法。

    66710

    View编程指南

    view通过使用手势识别器或通过直接处理触摸事件来响应其矩形区域中触摸事件。在view层次结构,父view负责定位和调整其子view大小,并且可以动态地执行。...您指定可拉伸区域可以允许沿View一个或两个轴伸展。 当然,当沿着两个轴伸展View时,view边缘也必须定义可重复图案以避免任何失真。...任何子viewframe矩形仍然有效,因为它们是相对于viewbounds View运行时交互模型 每当用户与您用户界面进行交互时,或者您自己代码编程方式更改某些内容时,都会在UIKit内部发生一系列复杂事件来处理该交互...图显示了用户触摸屏幕开始事件基本顺序,图形系统作为响应更新屏幕内容结束。 任何由程序启动动作也会发生相同事件序列。 用户触摸屏幕。 硬件将触摸事件报告给UIKit框架。...在这种情况下,view仍然可以处理触摸事件,但由于它是全屏,所以不需要布置subviews。

    2.3K20

    WPF 表格控件 ReoGrid 简单使用

    WPF 表格控件 ReoGrid 简单使用 目录 一、概述 二、安装 三、添加控件 四、加载 Excel 五、属性设置 六、支持触摸滚动 七、其它操作 1、显示和隐藏列 2、显示特定字体 八、资源链接...本文演示在 WPF 使用,用是直接加载 Excel 方式,另外解决了触摸滑动问题。 二、安装 新建好 WPF 项目后,我们使用 NuGet 安装 ReoGrid。...,还会看到突出表头线(这个是 Excel 机制决定,主要还是空白问题),如下图: 三、添加控件 在 Xaml 引入命名空间,然后添加 ReoGridControl: xmlns:reoGrid...至于其它表格样式调整,直接在 Excel 调整即可(效果和源文件略有差异): 六、支持触摸滚动 到目前为止,在触摸屏下,是只支持触摸滚动条进行内容滚动,直接在表格内容区进行触摸滚动是没有效果。...官方文档(https://reogrid.net/document/style/)指明了设置字体方法: 另外一种方法依然是直接在 Excel 设置字体。

    3.5K10

    手势抽象类——UIGestureRecognizer三. UIGestureRecogni

    触发方法,并且触发时候,所有添加selector都会被执行,我们点击手势示例如下: - (void)viewDidLoad { [super viewDidLoad]; UITapGestureRecognizer...> delegate; //设置手势是否有效 @property(nonatomic, getter=isEnabled) BOOL enabled; //获取手势所在View @property...,也就是说默认当识别到手势时,touch事件传递方法将被终止而不执行,如果设置为NO,touch事件传递方法仍然会被执行,上例我们使用了拖拽手势和touchesMoved两个触发方式,当我们把cancelTouchesInView...pan.cancelsTouchesInView = YES 我们发现touchesMoved方法仍然被调用了,这是为什么呢?...; //设置在按触时时允许移动最大距离 默认为10像素 @property (nonatomic) CGFloat allowableMovement; 7.

    2.5K50
    领券