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

以编程方式创建的uiview不会在第一次单击时响应

以编程方式创建的UIView不会在第一次单击时响应,这可能是由于以下几个原因导致的:

  1. 缺少用户交互:默认情况下,通过编程方式创建的UIView是没有启用用户交互的。要使UIView响应用户的单击事件,需要将其用户交互属性设置为true。可以使用以下代码实现:
代码语言:swift
复制
yourView.isUserInteractionEnabled = true
  1. 缺少手势识别器:即使启用了用户交互,UIView仍然需要手势识别器来检测和处理单击事件。可以使用UITapGestureRecognizer手势识别器来实现。以下是一个示例代码:
代码语言:swift
复制
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
yourView.addGestureRecognizer(tapGesture)

然后,需要在相应的处理函数中定义处理单击事件的逻辑:

代码语言:swift
复制
@objc func handleTap(_ sender: UITapGestureRecognizer) {
    // 处理单击事件的逻辑
}
  1. 视图层次结构问题:如果通过编程方式创建的UIView被添加到了其他视图的下方,可能会导致它无法接收到单击事件。确保将其添加到正确的视图层次结构中,并且位于需要接收单击事件的视图之上。

总结起来,要使通过编程方式创建的UIView在第一次单击时响应,需要确保启用了用户交互属性,并添加了手势识别器来处理单击事件。同时,还需要确保视图位于正确的视图层次结构中。

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

相关·内容

iOS 小技能: Responder Chain(响应者链)【上篇】

创建一个与手指相关联UITouch对象;一根手指对应一个UItouch对象。.../*返回值表示触摸在view上位置 这里返回位置是针对view坐标系view左上角为原点(0, 0)) 调用时传入view参数为nil的话,返回是触摸点在UIWindow位置*/...响应触摸事件都是屏幕上界面元素,而且必须是继承自UIResponder类界面类(包括各种常见视图类及其视图控制器类,如UIView和UIViewController)才可以响应触摸事件。...当触摸事件发生后,系统会将触摸事件UIEvent方式加入到UIApplication事件队列中,UIApplication将事件分发给根部UIWindow去处理,UIWindow则开始调用hitTest...所谓响应就是开发中为事件绑定一个触发函数,事件发生后执行响应函数里代码,例如通过addTarget方法为按钮单击事件绑定响应函数,在按钮被单击后能及时执行想要执行任务。

1.1K30
  • iOS 事件处理机制与图像渲染过程

    UIView最大不同是CALayer不处理用户交互。CALayer并不清楚具体响应链。...UIView和CALayer是一个平行层级关系,每一个UIView都有一个CALayer实例图层属性,也就是所谓backing layer,视图职责就是创建并管理这个图层,确保当子视图在层级关系中添加或者被移除时候...当Oberver监听事件到来时,回调执行函数中会遍历所有待处理UIView/CAlayer 执行实际绘制和调整,并更新 UI 界面。...而其它属性如果是开启,就不会有缓存,离屏绘制会在每一帧都发生。 在开发需要根据实际情况来选择最优实现方式,尽量使用On-Screen Rendering。...Node 刚创建,并不会在内部新建 UIView 和 CALayer,直到第一次在主线程访问 view 或 layer 属性,它才会在内部生成对应对象。

    5.5K100

    iOS14开发-触摸与手势识别

    属性 (1)window:触摸所处 UIWindow。 (2)view:触摸所处 UIView。 (3)tapCount:短时间内点按屏幕次数。可据此判断单击和双击操作。...遍历每一个子 UIView ,都会重复上面的操作(判断能否响应触摸事件,能则继续遍历子 UIView,直到找到一个 UIView)直到找到最合适 UIView。...使用步骤 创建手势实例,指定回调方法,当手势开始,改变、或结束,回调方法被调用。 将手势添加到需要 UIView 上。...每个手势只对应一个 UIView,当屏幕触摸在当前 UIView,如果手势和预定一样,回调方法就会调用。 手势可以通过 storyboard 或者纯代码使用。...继承自 UIControl UIView 都可以通过 Target-Action 方式添加事件,如果同时给它们添加手势识别, 则 Target-Action 行为会失效,因为手势识别的优先级更高。

    2.3K20

    Cocoa编程中视图控制器与视图类详解

    iPhone编程规则是:一个窗口,多个视图。UIView是iPhone屏幕上很多控件基础类。...视窗UIWindow虽然也是UIView,但不能用处理普通UIView方式来设置; 2....选项卡类方便之处就是不需要象导航栏那样方式推入和弹出视图操作,而是组建一系列控制器(它们各自可以是UIViewController、UINavigationController、UITableViewController...控制器加载视图过程 当调用视图控制器view属性,视图控制器会先调用loadView方法加载视图,因此,可以在loadView方法中创建所有的视图,这是比较好编程惯例。...事件处理 如图所示,一般情况下,当一个视图不响应用户事件,它会将事件传递给它父视图。但是,当视图被视图控制器管理,它会将事件首先传递给视图控制器。

    5.1K50

    View编程指南(三)

    view参与响应者链。 创建View 创建View最简单方法是使用Interface Builder图形方式进行组装。...如果您希望编程方式创建view,请创建并初始化它们,然后使用以下方法将它们排列为层次结构: 要将subview添加到superview,请调用superviewaddSubview:方法。...如果编程方式构建view,则将view创建代码放置在view controllerloadView方法中。...您可以使用这些通知来更新与您view层次结构相关任何状态信息或执行其他任务。 创建view层次结构后,可以使用superivew和subview属性编程方式导航它。...如果使用Interface Builder创建view,则可以使用outlet将nib文件中对象连接到另一个对象。对于编程方式创建view,可以在私有成员变量中存储对这些view引用。

    1.7K30

    iOS中手势应用1. 四类事件主要方法2. 响应者链3. 手势识别功能(Gesture Recognizer)4. 手势使用

    UIView继承自UIResponder,因此所有的控件都是响应者对象 UIWindow:是特殊UIView,所以也是响应者对象 UIApplication,所以也是响应者对象 1....响应者链 概念吶,我们就不说了,网上文章应该一搜一大堆。这里是比较理论化知识,是比较考验我们对于iOS中触摸事件理解深度。这里我就只是用简单方式,写一下自己对于这部分理解。...UIButton肯定是放在一个UIView上面,UIView也肯定是放在一个Controller里面。这几个都是响应者对象,总不能让大家一起给用户反馈吧。...一个响应对象只有在当前响应者能放弃第一响应者状态(canResignFirstResponder)且自身能成为第一响应者(canBecomeFirstResponder)才会成为第一响应者。...- (void)addTapGesture { //创建缩放点按(单击,点击)并添加手势监听事件 UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer

    2.3K40

    UIGestureRecognizer  手势识别一、概念介绍二、UIView 分类三、UIGestureRecognizer 抽象类四、UIGestureRecognizerDelegate 代理

    视图 @property(nullable, nonatomic,readonly) UIView *view; 4、是否取消触摸控件响应 默认为YES,这种情况下当手势识别器识别到触摸之后,会发送...touchesCancelled给触摸到控件取消控件view对touch响应,这个时候只有手势识别器响应touch,当设置成NO,手势识别器识别到触摸之后不会发送touchesCancelled...默认是NO,这种情况下当发生一个触摸,手势识别器先捕捉到到触摸,然后发给触摸到控件,两者各自做出响应。...,则不会延迟,即会立即发送touchesEnded结束当前触摸。...有时手势是相关联,如单机和双击,点击和长按,点下去瞬间可能只会识别到单击无法识别其他,该方法可以指定某一个 手势,即便自己已经满足条件了,也不会立刻触发,会等到该指定手势确定失败之后才触发 -

    3K81

    手势抽象类——UIGestureRecognizer三. UIGestureRecogni

    )initWithTarget:(nullable id)target action:(nullable SEL)action 当然,如果我们使用alloc-init方式,也是可以,下面的方法可以为手势添加触发...触发方法,并且触发时候,所有添加selector都会被执行,我们点击手势示例如下: - (void)viewDidLoad { [super viewDidLoad]; UITapGestureRecognizer...,也就是说默认当识别到手势,touch事件传递方法将被终止而不执行,如果设置为NO,touch事件传递方法仍然会被执行,上例中我们使用了拖拽手势和touchesMoved两个触发方式,当我们把cancelTouchesInView...设置为NO,在屏幕上滑动,两种方式都在触发,打印如下: ?...比如,单击和双击并存,如果不做处理,它就只能发送出单击消息。为了能够识别出双击手势,就需要用下面的方法一个特殊处理逻辑,即先判断手势是否是双击,在双击失效情况下作为单击手势处理。

    2.5K50

    iOS-UITouch事件处理详解1. iOS中事件基本介绍2.UITouch3.UIEvent4. 事件产生和传递5. 通过UITouch方法监听View触摸事件缺点

    我们称之为“响应者对象” UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 1.1 事件可以分为三大类型...UITouch创建 当用户用一根手指触摸屏幕,会创建一个与手指相关联UITouch对象,一根手指对应一个UITouch对象。 2....(nonatomic,readonly,retain) UIView *view; 短时间内点按屏幕次数,可以根据tapCount判断单击、双击或更多点击 @property(nonatomic...UITouch常用方法 - (CGPoint)locationInView:(UIView *)view; //返回值表示触摸在view上位置 //这里返回位置是针对view坐标系view...方法来作具体事件处理 这些touches方法默认做法是将事件顺着响应者链条向上传递,将事件交给上一个响应者进行处理 判断上一个响应者,如果view控制器存在,控制器就为上一个响应者,传递给控制器;

    1.7K60

    iOS常见问题

    ARC几个要点: 在对象被创建 retain count +1,在对象被release retain count -1.当retain count 为0 ,销毁对象。...(MRC下即谁创建,谁释放,避免重复释放) 3.模块化操作,对象可能被多个模块创建和使用,不能确定最后由谁去释放。...load会在类初始加载时调用 initialize会在第一次调用类类方法或实例方法之前被调用 这两个方法是可选,且只有在实现了它们才会被调用。 共同点:两个方法都只会被调用一次。...否则,就创建一个UIView对象。 如果你用Interface Builder来创建界面,那么不应该重载这个方法。 如果你想自己创建view对象,那么可以重载这个方法。...如果你想自己控制view对象创建,例如创建一个特殊尺寸view,那么可以重载这个方法,自己创建一个UIView对象,然后指定 self.view = myView; 但这种情况也没有必要调用super

    65730

    UIViewController生命周期

    一、视图控制器 UIViewController采用懒加载方式,也就是说第一次访问到view属性才会加载或创建它。...由于视图由视图控制器管理,所以讨论视图加载方式,主要讨论视图控制器加载方式。 通过Storyboard加载:这是苹果推荐方式。...这需要我们在loadView 方法中,通过编程创建自己视图层次,并且把把根视图赋值给UIViewControllerview属性。...通过加载xib文件来创建UIViewControllerview 如果没有找到相关联xib文件,就会创建一个空白UIView,然后赋值给UIViewControllerview属性 默认不用实现...三、UIView生命周期其他点 layoutSubviews被调用时机: addSubview会触发layoutSubviews,比如viewA add viewB,第一次添加A和BlayoutSubviews

    1.9K10

    touchesBegan 触摸事件一、概念介绍二、方法介绍三、参数介绍:touches四、参数介绍:event

    我们称之为“响应者对象” UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 一次完整触摸过程中,...,通过forin循环来遍历NSSet中每一个元素 当用户用一根手指触摸屏幕,会创建一个与手指相关联UITouch对象, 保存着跟本次手指触摸相关信息,比如触摸位置、时间、阶段, 当手指离开屏幕...,系统会销毁相应UITouch对象 属性: (1)获取触摸产生所处窗口 @property(nonatomic,readonly,retain) UIWindow *window; (2)获取触摸产生所处视图...@property(nonatomic,readonly,retain) UIView *view; (3)获取短时间内点按屏幕次数,可以根据tapCount判断单击、双击或更多点击 @property...这里返回位置是针对view坐标系view左上角为原点(0, 0)),调用时传入view参数为nil的话,返回是触摸点在UIWindow位置 - (CGPoint)locationInView

    2.5K100

    UIViewController生命周期及iOS程序执行顺序

    ,viewDidUnload将会被执行,本视图所有子视图将被销毁,释放内存, 此时开发者需要手动对viewLoad、viewDidLoad中创建对象释放内存。...当我们创建一个UIViewController类对象,通常系统会生成几个默认方法,这些方法大多与视图调用有关,但是在视图调用时,这些方法调用顺序如何,需要整理下。...,达到释放内存目的。...这个方法通常并不会在视图变换时候被调用,而只会在系统退出或者收到内存警告时候才会被调用。 但是由于我们需要保证在收到内存警告时候能够对其作出反应,所以这个方法通常我们都需要去实现。...loadView 此方法在控制器view为nil时候被调用。 此方法用于编程方式创建view时候用到。

    1.9K110

    touchesBegan 触摸事件

    我们称之为“响应者对象”。 UIApplication、UIViewController、UIView都继承自UIResponder,因此它们都是响应者对象,都能接收并处理事件。...,通过forin循环来遍历NSSet中每一个元素,当用户用一根手指触摸屏幕,会创建一个与手指相关联UITouch对象, 保存着跟本次手指触摸相关信息,比如触摸位置、时间、阶段, 当手指离开屏幕...1、属性: 1)获取触摸产生所处窗口 @property(nonatomic,readonly,retain) UIWindow *window; 2)获取触摸产生所处视图 @property...(nonatomic,readonly,retain) UIView *view; 3)获取短时间内点按屏幕次数,可以根据tapCount判断单击、双击或更多点击 @property(nonatomic...,这里返回位置是针对view坐标系(view左上角为圆点(0,0)),调用时传入view参数为nil的话,返回是触摸点在UIWindow位置 - (CGPoint)locationInView

    82220

    IOS5开发-UIScrollView添加单击事件方法

    UIScrollView在开发中是一个非常常用控件,UIScrollView具有水平、垂直滚动和缩放效果。但是尽然没有响应单击事件这个事件。而这个事件在日常交互中是非常需要。...比如当用于单击或轻触图片某个位置,给于一些交互性提示。 下面我将用例子说明一下如何给UIScrollView添加一个单击响应。...但是这里注意一下 [self.nextResponder touchesEnded:touches withEvent:event];这句话意思是将UIScrollView上单击事件往下传递,传递到它父...UIView。...这样如果父UIView上实现了touchesEnded这个方法,也会响应到。但是这样写法经过测试在IOS5.0以前版本可以。但IOS5以后(包括5)这不能往下传递,这里我也不知道为什么。

    1.9K70

    iOS开发中手势体系——UIGestureRecognizer分析及其子类使用

    iOS开发中手势体系——UIGestureRecognizer分析及其子类使用 一、引言         在iOS系统中,手势是进行用户交互重要方式,通过UIGestureRecognizer类,...我们可以轻松创建出各种手势应用于app中。...有关消息传递一些讨论,在前面的博客中有提到: iOS事件响应控制:http://my.oschina.net/u/2340880/blog/396161。...方式存在,iOS系统允许一个手势对象可以添加多个selector触发方法,并且触发时候,所有添加selector都会被执行,我们点击手势示例如下: - (void)viewDidLoad {     ..."); } 上面我们使用了拖拽手势和touchesMoved两个触发方式,当我们把cancelTouchesInView设置为NO,在屏幕上滑动,会发现两种方式都在触发,打印如下: ?

    1.8K20

    View编程指南

    当你在运行时加载一个nib文件时候,它里面的对象被重新编译成实际对象,你代码可以通过编程来操作。 Interface Builder极大地简化了您在创建应用程序用户界面方面所做工作。...View绘图周期 UIView类使用按需绘制模型来呈现内容。当一个view第一次出现在屏幕上,系统要求它画出其内容。系统捕获此内容snapshot,并将该snapshot用作view视觉表示。...当view第一次显示,它像往常一样渲染其内容,并将结果捕获在底层位图中。之后,对view’s geometry更改并不总是会导致重新创建位图。...任何子viewframe矩形仍然有效,因为它们是相对于viewbounds View运行时交互模型 每当用户与您用户界面进行交互,或者您自己代码编程方式更改某些内容,都会在UIKit内部发生一系列复杂事件来处理该交互...您可以根据需要更改此模式,不同方式调整您内容,但是如果可以的话,您应该避免使用UIViewContentModeRedraw内容模式。

    2.3K20
    领券