UIView 用户事件相应总结1

语义通信高斯信道仿真代码 【代码】语义通信高斯信道仿真代码。 阅读详情

 UIView除了负责展示内容给用户外还负责响应用户事件。本章主要介绍UIView用户交互相关的属性和方法。

  1、交互相关的属性

  userInteractionEnabled 默认是YES ,如果设置为NO则不响应用户事件,并且把当前控件从事件队列中删除。也就是说设置了userInterfaceEnabled属性的视图会打断响应者链导致该view的subview都无法响应事件。

  multipleTouchEnabled  默认是NO,如果设置为YES则支持多点触碰。

  exclusiveTouch 默认是NO,如果设置为YES则当前UIView会独占整个Touch事件。具体来说就是如果UIView设置了exclusiveTouch属性为YES则当这个UIView成为第一响应者时,在手指离开屏幕前其他view不会响应任何touch事件。

  作用举例:UITableView的每个cell都需要使用exclusive,否则同时点击多个cell会触发每个视图的事件响应。手势识别会忽略此属性。

 

  2、触摸响应

  了解UIView的触碰响应之前,首先了解在iOS中触碰事件是什么,事件在视图模型中是如何传递的,视图在接收到一个事件是如何响应的。下面介绍触碰事件类UITouch和响应者链来解释事件的工作原理。

  在iOS中UITouch类代表触碰事件。当用户触摸屏幕后就会产生相应的事件,所有相关的UITouch对象都被包装在事件中,被程序交由特定的对象处理。UITouch对象包括触碰的详细信息。

  UITouch含有5个属性:

  window:触碰产生时所处的窗口,由于窗口可能发生变化,当前所在的窗口不一定是最开始的窗口。

  view:触碰产生时所处的视图。由于视图可能发生变化,当前视图也不一定是最初的视图。

  tapCount:短时间内轻击(tap)屏幕的次数,可根据tapCount判断单击、双击或更多的轻击。

  timestamp:时间戳记录了触碰事件产生或变化时的时间。单位是秒。

  phase:触碰事件在屏幕上有一个周期,即触碰开始、触碰点移动、触碰结束,中途取消。通过phase可以查看当前触碰事件在一个周期中所处的状态。UITouchPhase枚举:

  UITouchPhaseBegan

  UITouchPhaseMoved

  UITouchPhaseStationary

  UITouchPhaseEnded

  UITouchPhaseCancelled

 

  当手指触碰到屏幕,无论是单点还是多点触碰,事件都会开始,直到用户所有的手指都离开屏幕。期间所有的UITouch对象都被封装在UIEvent事件对象中,由程序分发给处理者。事件记录了这个周期中所有触碰对象状态的变化。

  只要屏幕被触摸,系统会将诺干个触碰信息封装到UIEvent对象中发送给程序,由管理程序UIApplication对象将事件分发。

 

  响应者对象就是可以响应事件并对事件作出处理的对象。在iOS中UIResponder类定义了响应者对象的所有方法。UIApplication、UIWindow、UIViewController、UIView以及UIKit中继承自UIView的控件都间接或直接继承自UIResponder类,这些类都可以当做响应者。

  响应者链表示一系列响应者对象组成的事件传递的链条。当确定了第一响应者后,事件交由第一响应者处理,如果第一响应者不处理事件沿着响应者链传递,交给下一个响应者。一般来说,第一响应者是UIView对象或者UIView的子类对象,当其被触摸后事件交由它处理,如果它不处理,事件就会交给它的UIViewController处理(如果存在),然后是它的superview父视图对象,以此类推,直到顶层视图。如果顶层视图不处理则交给UIWindow对象处理,再到UIApplication对象(如果UIApplication继承自UIResponder)。如果整个响应者链都不响应这个事件则该事件被丢弃。

 

  UIView类继承了UIResponder类,要对事件作出处理还需要重写UIResponder类中定义的事件处理函数。根据不同的触碰状态,程序会调用相应的处理函数,这些函数包括:

  -(void) touchesBegan:(NSSet *)touches withEvents:(UIEvent *)event;

  -(void) touchesMoved:(NSSet *)touches withEvents:(UIEvent *)event;

  -(void) touchesEnded:(NSSet *)touches withEvents:(UIEvent *)event;

  -(void) touchesCancelled:(NSSet *)touches withEvents:(UIEvent *)event;

 

  这几个方法被调用时,对应了UITouch类中的phase属性的4个枚举值。当触碰被取消,如触碰过程中被来电打断,会调用touchesCancelled:touches:方法。

  这些方法在开发中并不需要全部实现,可以根据需要重写特定的方法。这4个方法都有两个相同的参数:NSSet类型的touches和UIEvent类型的event。Touches表示触碰产生的所有的UITouch对象,event表示事件。因为UIEvent包含了整个触碰过程中所有的触碰对象,所以可以调用allTouches 方法获取该事件内所有触碰对象,也可以调用touchesForView;或者touchesForWindows;取出特定视图或者窗口上的触碰对象。在这几个事件中,都可以拿到触碰对象,然后根据其位置、状态、时间属性做逻辑处理。

 

  轻击操作很容易引起歧义,比如用户点击了一次之后,并不知道用户是想单击还是只是双击的一部分,或者点了两次之后并不知道用户是想双击还是继续点击。可以使用延迟调用函数解决这个问题。

   

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
 
  UITouch *touch = [touches anyObject];
          if (touch.tapCount == 1)
         {
                 [self performSelector:@selector(setBackground:) withObject:[UIColor blueColor] afterDelay:2];
 
          }
          else if(touch.tapCount == 2)
          {
                 [self cancelPreviousPerformRequestsWIthTarget:self              selector:@selector(setBackground:) object:[UIColor blueColor]];
                 self.view.backgroundColor = [UIColor redColor];
           }
  }   

  

  除了触碰事件外UIResponder还提供了运动事件的支持。

  运动事件的方法:

  -(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event 摇动事件开始

  -(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 摇动事件结束

  -(void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event  摇动事件被中断

 

  远程事件:

  -(void)remoteControlReceivedWithEvent: 音乐后台播放控制的时候会用到 (需要在plist 中注册事件)

 

  第一响应者的相关函数:

  - (BOOL)canBecomeFirstResponder    默认返回NO

  - (BOOL)becomeFirstResponder

  - (BOOL)canResignFirstResponder    默认返回YES

  - (BOOL)resignFirstResponder;

  - (BOOL)isFirstResponder

  可以通过becomeFirstResponder方法注册成为第一响应者,通过resignFirstResponder方法不成为第一响应者。比如通过这两个方法操作UITextField来控制键盘的现隐藏。

 

  3、手势

  属性:

  NSArray *gestureRecognizers 

  可以通过这个属性获取当前UIView的所有手势对象。手势在触碰事件处理流程中,处于观察者的角色,其不是view层级结构的一部分,所以不参与响应者链。在将触摸事件发送给hit-test view之前,系统会先将触碰事件发送到view绑定的Gesture Recognizer上。

  UIView关于手势的方法:

  -(void) addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer  增加一个手势。

  -(void) removeGestureRecognizer:(UIGestureRecognizer *)getureRecognizer 删除一个手势。

  -(BOOL) gestureRecognizerShouldBegan:(UIGestureRecognizer *)gestureRecognizer 询问是否开始执行该手势,默认返回YES。

  手势相比触碰事件的好处是可以直接使用已经定义好的手势,开发者不用自己计算手指移动轨迹。手势识别的基类是UIGestureRecognizer,是一个抽象类,定义了实现底层手势识别行为的编程接口。衍生类如下:

  UITabGestureRecognizer         轻击手势

  UIPinchGestureRecognizer       捏合手势

  UIRotationGestureRecognizer    旋转手势

  UISwipeGestureRecognizer  轻扫手势

  UIPanGestureRecognizer 拖拽手势

  UILongPressGestrueRecognizer 长按手势

 

  UIGestureRecognizer主要方法:

  -(id) initWithTarget:action: 初始化方法

  -(void)addTarget:action:   

  -(void)removeTarget:action: 

  主要属性:

  UIGestureRecognizerState state 手势识别当前状态

  有以下几种情况:

  UIGestureRecognizerStatePossibel,  未识别状态

  UIGestureRecognizerStateBegan,     手势开始

  UIGestureRecognizerStateChanged,  手势改变

  UIGestureRecognizerStateEnded, 手势结束

  UIGestureRecognizerStateFailured 手势失败,被其他事件中断。当把手势state设为这个值得时候相当于取消了这个手势。

   cancelsTouchesInView 为YES时,表示当Gesture Recognizers识别到手势后,会向hit-test view发送touchesCancelled:消息以取消hit-test view对触碰序列的处理,这样只有Gesture Recognizer响应此次触碰,响应者链的view不再响应。如果为NO,则不发送touchesCancelled:消息,这样Gesture Recognizer和view同时响应触碰事件。默认值是YES。

  delaysTouchesBegan 为NO时表示触碰序列已经开始而手势识别还未识别出此手势时,touch事件会同时发给hit-test view。如果为YES,则手势在识别过程中,不会有任何触碰事件发送给hit-test view;如果手势识别器最终识别了手势,则也不会发送任何消息给hit-test view;如果手势识别器最终没有识别到手势,才会发送所有触碰事件给view处理。默认值是NO。

  delaysTouchesBegan 为YES时,延迟发送touchesEnded:消息,手势失败时才发送。默认值是YES。

  

  UITabGestureRecognizer  轻击手势任意手指任意次数的点击

  属性:

  numberOfTapsRequired 点击次数

  numberOfTouchesRequired 手指个数  

 

  UIPinchGestureRecognizer  捏合或者扩张手势

  属性:

  scale:初始值为1,两手指距离减少则scale不断变小;两个手指重合则变为0;

  velocity:初始值为0,手指移动的相对速度,两手指距离减少为负数,速度越快数值越少;两手指距离变大为整数,速度越快数值越大。

 

  UIRotationGestureRecognizer 旋转手势

  属性:

  rotation:初始值为0,两手指的旋转弧度,顺时针旋转为正数,逆时针旋转为负数。

  velocity:初始值为0手指一动的相对速度,顺时针为正数越快值越大;逆时针为负越快越小。

 

  UISwipGestureRecognizer 轻扫手势,一个手势只能指定一个方向,如果需要指定多个方向需要多个手势

  属性:

  numberOfTouchesRequired: 手指个数

  direction:手势方向,如UISwipeGestureRecognizerDirectionRight 向右

 

  UIPanGestureRecognizer:  拖拽手势,相比轻扫手势,手指与屏幕的交互时间更长。

  属性:

  mininumNumberOfTouches 默认值为1,最少手指数量

  maxnumNumberOfTouches 最大手指数量

  方法:

  - (CGPoint)velocityInView:(UIView *)view  返回拖拽手势的速度,值是每秒移过的point值,被分成水平和垂直两个分量。

  UILongPressGestrueRecognizer: 长按手势。

  属性:

  numberOfTapsRequired:默认值为0,轻击的次数。

  numberOfTouchesRequired:默认值是1,手指数量。

  mininumPressDuration:默认值为0.5,单位是秒。

  allowableMovement:默认值为10,单位是像素pixels。

 

 

  多手势兼容

  可以为View添加多个手势,缺省情况下,没有对手势的执行顺序排序,每次调用顺序可能都不同。通过以下方法可以控制手势的响应顺序。

  - (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer

  在作为参数的GestureRecognizer失败以后手势才发生,否则手势从不会发生。

  [self.panRecognizer requireGestureRecognizerToFail:self.swipeRecognizer];  捏合手势失败后才会触发拖拽手势。如果捏合手势成功则拖拽手势永远不会被触发

 

  - (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)preventingGestureRecognizer

  这个方法可以重载,比如UIGestureRecognizer的子类重载了这个方法返回NO,也就是说无论任何情况下子类的手势都不能被阻止,是非常强势的手势。

  如果返回YES,那么preventingGestureRecognizer传入的手势就会组织子类手势。比如:

  [rotationGestureRecognizer canBePreventedByGestureRecognizer:pinchGestureRecognizer]; 如果rotation手势重载了canBePreventedByGestureRecognizer方法并且返回YES。则旋转手势被捏合手势阻止,但是旋转手势不能阻止捏合手势。

  还可以在方法体中加入逻辑判断。

 

  - (BOOL)canPreventGestureRecognizer:(UIGestureRecognizer *)preventedGestureRecognizer

  这个方法同样可以重载,如果返回NO则这个手势不能阻止其他任何手势。

  如果返回YES,就可以阻止preventedGestureRecognizer的手势。比如:

  [rotationGestureRecognizer canPreventGestureRecognizer:pinchGestureRecognizer];  如果rotation手势重载了canBePreventedByGestureRecognizer方法并且返回YES。则旋转手势阻止了捏合手势。

 

  UIGestureRecognizerDelegate

  - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

  此方法在gesture recognizer视图传出UIGestureRecognizerStatePossible状态时调用,如果返回NO,则转换成UIGestureRecognizerStateFailed;如果返回YES,则继续识别。默认返回YES

  - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

  此方法在window对象有触碰事件发生时,touchesBegan:withEvent:方法之前调用。如果返回NO,则GestureRecognizer忽略此触碰事件。默认返回YES。可以用于禁止某个区域的手势。

  - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
  如果有多个手势接收到了同一个消息,该回调方法决定当前手势是否要响应该事件,如果返回YES则该事件被响应,如果返回NO该事件将被忽略

!!!.响应链流程 !!!
从application object从事件队列里取到事件,通过hitTest得到即将要处理此事件的视图或者忽略此事件, 然后通过得到的视图, 由于都是继承与UIResponder所以能够调用touchBegin等相关api。
如何通过hitTest得到相关的视图, 以一个官方图讲解过程,结合上篇博客图层概念, 最开始是window,如果点击在window范围内, 则开始对window子视图进行遍历,从图层的最上层开始依次调用, 否则放弃都子视图的遍历, 除非将UIView的clipToBound设置为NO, 这样便可对超出父视图以外的子视图检测, 以后的检测过
程类似。


四大厂商网络设备巡检命令实战指南:华为、华三、锐捷、思科 本文详细介绍了华为、华三、锐捷、思科四大厂商网络设备的巡检命令实战指南,涵盖硬件状态、软件运行和网络功能等核心维度。通过具体命令示例和实用技巧,帮助网络工程师高效完成设备巡检,预防潜在故障,确保网络稳定运行。 阅读详情

相关推荐

别再用Excel硬算传热了!用MATLAB/Octave复现国赛数学建模A题(附完整代码与避坑指南)

本文详细介绍了如何利用MATLAB/Octave高效解决数学建模中的传热问题,替代传统的Excel计算方法。通过复现2018年国赛A题的高温作业服传热模型,从理论推导到代码实现,提供了完整的有限差分法解决方案和参数拟合技巧,帮助读者提升数学建模效率和准确性。

weixin_30512965的博客 379

自定义Cell上的点击事件两种方法

方法一是代理:这里先忽略,不写! 方法二是Block: 1、在Cell的类中需要定义一个block块的类型变量,用于在ViewController中使用;//创建cell的block块把按钮的tag传到ViewController中 typedef void (^CellBlock) (CCustomTableViewCell * cell, UIButton *button);

Sunny_212319 3446

PADS VX2.4 缝合孔(阵列过孔)的添加方法

缝合孔的主要目的是:①:增加底层和顶层的地铜皮的连接性,②:起到屏蔽外界信号干扰的作用。铺完铜后,右击空区域选择“选择形状”命令,选取整板中的一块大铜皮,右击选择“覆铜区域内过孔阵列模式”→“沿周边”指令后,再右击选择“覆铜区域内过孔阵列”,便能看到已选区域内添加的缝合孔(过孔阵列),也可以通过铜皮显示或隐藏的无模命令:PO进行查看。完成上面的“防止错误”和“过孔样式”的设置后,开始对整板进行铺铜处理,点击“工具栏”→覆铜平面指示器,在弹出的对话框点击“开始”,便能观察铺铜后的板子。

tianpu2320959696的博客 3054

iOS开发之touchesCancelled

touchesCancelled: override func touchesCancelled(touches: Set?, withEvent event: UIEvent?) { } 当我们正在触摸屏幕的时候,如果出现了低电量、有电话呼入等等这样的系统事件时候,低电量或者电话的窗口会置为前台,这个时候touchesCancelled方法就会被调

柳婼 の blog 2171

AgentFlow:模块化智能体框架与Flow-GRPO强化学习实战解析

在人工智能领域,大语言模型(LLM)与智能体(Agent)技术正推动着自动化任务处理的发展。其核心原理在于通过规划、执行与反馈的循环,使AI系统能够自主调用工具解决复杂问题。这一技术的价值在于突破单一模型的局限性,实现更可靠的多步骤推理。在实际应用中,智能体框架需要处理搜索、代码执行、数学计算等多种场景。本文聚焦的AgentFlow框架,正是通过模块化设计将智能体拆分为规划者、执行者、验证者和生成者四个专家模块,并引入Flow-GRPO强化学习算法进行流程内优化。该框架在搜索增强与工具调用等任务上展现出显著

weixin_42311427的博客 367

快速上手springboot+vue的前后端分离项目

使用webStorm新建项目后,把 .lock文件删除后项目运行才不报错,配置文件 vue.config.js 中加入 lintOnSave: false 关闭eslint语法检测。在多层嵌套的父子组件之间传递状态已经十分麻烦,而Vue更是没有为兄弟组件提供直接共享数据的办法。基于这个问题,许多框架提供了解决方案——使用全局的状态管理器,将所有分散的共享数据交由状态管理器保管,Vue也不例外。其中一种解决CORS 的方法, 在springboot项目中跨域的方法或类加上@CrossOrigin注解。

m0_61950264的博客 1905

ExclusiveTouch的设置与作用

ExclusiveTouch的作用是:可以达到同一界面上多个控件接受事件时的排他性,从而避免bug。也就是说避免在一个界面上同时点击多个UIButton导致同时响应多个方法。 - (void)setExclusiveTouchForButtons:(UIView *)myView {           for (UIView * v in [myView subviews])

iOS&Android开发 1122

AI算力瓶颈与系统优化实战指南

AI算力瓶颈已成为制约人工智能发展的关键因素,特别是在处理transformer类模型时,传统的冯·诺依曼架构面临严重的'内存墙'问题。通过硬件加速、系统优化和算法改进的三级策略,可以有效提升资源利用率。在嵌入式AI领域,结合量化、剪枝和专用指令集扩展等技术,能在资源受限设备上实现高效推理。这些优化方法在自动驾驶、工业视觉等场景中已展现出显著价值,推动AI应用从云端向边缘迁移。随着AI算力需求的持续增长,掌握系统优化技能将成为开发者的核心竞争力。

weixin_32597009的博客 340

iOS开发——响应链(Responder Chain)的深入理解和代码示例

我在之前一篇博客《iOS响应者链Responder Chain浅析》中对iOS开发中遇到的响应者链概念有了基本的了解。但是仅仅停留在理解概念的基础上还是远远不够的。该博客我们会通过代码案例来深入理解响应链。该博客的示例上传至 https://github.com/chenyufeng1991/ResponderChain  。(1)首先来说说第一响应者(First Responder)。响应事件的

乞力马扎罗的雪CYF的博客 1万+

C++实现设计ATM机系统

这个示例实现了一个基本的ATM机系统,支持注册、登录、存款、取款、查询余额和保存数据等功能。当然,这只是一个简单的ATM机模拟,实际的ATM机系统需要更复杂的逻辑和更严格的安全措施。C++编写一个简单的ATM机系统,我将提供一个基本的实现示例,但由于ATM机系统的复杂性和安全性要求,这只是一个简单的模拟,不适合在实际环境中使用。试设计一简单模拟ATM机系统,系统以菜单方式工作,采用自定义函数设计各功能模块被主菜单调用,使之能提供以下基本选项。=========欢迎使用ATM=========

走向CTO的路上... 1243

图像处理入门007:图像处理中的数学基础:线性代数与卷积

一种:把 OpenCV 当黑盒,调用,效果不对就乱调参数;另一种:理解每个像素是怎么被周围邻域"加权平均"的,理解核翻转、边界填充、stride 的含义。前者能干活,后者能解难题。一旦遇到自定义核(比如 ISP 上的锐化)、深度学习反向传播、医学图像重建,你就必须把卷积、相关、矩阵乘法这些基本功捡回来。线性代数三件套:向量点积、矩阵乘法、线性变换;2D 卷积的数学定义:核翻转、滑动窗口、边界填充。并手写一个,验证它与和的结果完全一致(误差 < 1e-9)。f∗gn∑m−∞∞f。

专注:太空算力、AI infra、异构调度、大模型成本工程 387

iOS学习笔记(2)— UIView用户事件响应

     UIView除了负责展示内容给用户外还负责响应用户事件。本章主要介绍UIView用户交互相关的属性和方法。   1、交互相关的属性   userInteractionEnabled默认是YES,如果设置为NO则不响应用户事件,并且把当前控件从事件队列中删除。也就是说设置了userInterfaceEnabled属性的视图会打断响应者链导致该view的subview都无法响...

weixin_30627381的博客 277

【异常】安装hermes-agent时提示GnuTLS recv error (-110): The TLS connection was non-properly terminated.

Git克隆仓库时出现TLS连接异常报错的解决方案摘要: 当执行git clone命令时遇到"GnuTLS recv error (-110)"报错,通常由网络不稳定、缓冲区不足或证书验证问题导致。主要解决方案包括:1)增大Git HTTP缓冲区(git config --global http.postBuffer 524288000);2)使用GitHub镜像站加速克隆;3)临时禁用SSL验证进行测试;4)检查并调整代理配置;5)改用SSH协议克隆。建议优先尝试增大缓冲区和镜像站方案,

奶爸的编程之路,也就一周冷个三天 1350

UIView用户事件响应

UIView除了负责展示内容给用户外还负责响应用户事件。本章主要介绍UIView用户交互相关的属性和方法。   1、交互相关的属性   userInteractionEnabled 默认是YES ,如果设置为NO则不响应用户事件,并且把当前控件从事件队列中删除。也就是说设置了userInterfaceEnabled属性的视图会打断响应者链导致该view的subview都无法响应事件。

海阔天空 761

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

iOS UIView用户事件响应(exclusiveTouch,触摸响应,手势)

原文地址::https://www.cnblogs.com/wfwenchao/articles/3831507.html 相关文章 1、iOS UIView的点击事件与触摸手势----https://blog.youkuaiyun.com/thanklife/article/details/77726242 2、UIView的触摸事件处理----https://www.jianshu.com/p/bc...

xqhrs232的专栏 416

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

UIView 中的控件事件穿透 Passthrough 的实现

我们在有多个 UIView 层叠时,比如一个按钮被一个 UIView 遮盖时,想要在点击最上层的 UIView 时能触发按钮的相应事件,我们该如何实现呢,初步可以想到几种办法: 1. 把按钮上层的所有 UIView 的 userInteractionEnabled 属性设置为 NO,要是 UIView 有自己的交互事件该如何办呢?而且这个 userInteractionEnabled 不能动态设

The Life with iOS 920

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

UIView用户事件总结

UIView除了负责展示内容给用户外还负责响应用户事件。本章主要介绍UIView用户交互相关的属性和方法。   1、交互相关的属性   userInteractionEnabled 默认是YES ,如果设置为NO则不响应用户事件,并且把当前控件从事件队列中删除。也就是说设置了userInterfaceEnabled属性的视图会打断响应者链导致该view的subview都无法响应事件。

一起坚持 880

uiview点击事件穿透

我们在有多个 UIView 层叠时,比如一个按钮被一个 UIView 遮盖时,想要在点击最上层的 UIView 时能触发按钮的相应事件,我们该如何实现呢,初步可以想到几种办法: 1. 把按钮上层的所有 UIView 的 userInteractionEnabled 属性设置为 NO,要是 UIView 有自己的交互事件该如何办呢?而且这个 userInteractionEnabled 不能动

slatop 5867
上一篇: ARC 使用准则
下一篇: iOS 屏幕旋转 及注意事项
皓浩
博客等级 码龄18年 157粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值