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

我可以在superView中的特定点获取子视图吗?

当然可以。在iOS开发中,您可以使用以下方法在特定点获取子视图:

代码语言:swift
复制
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
    for subview in subviews {
        let subviewPoint = subview.convert(point, from: self)
        if let result = subview.hitTest(subviewPoint, with: event) {
            return result
        }
    }
    return nil
}

这个方法会遍历所有子视图,并将点转换为子视图的坐标系,然后递归地调用hitTest方法。如果找到了一个子视图,该方法将返回该子视图。如果没有找到子视图,则返回nil

在使用这个方法之前,请确保您的superView已经正确地添加了子视图,并且子视图的userInteractionEnabled属性已经设置为true。这样才能确保点击事件能够正确地传递给子视图。

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

相关·内容

深入详解iOS适配技术

(其实也不是不可取,很多iOS开发者做屏幕适配的时候不是用的autoresizing或autolayout,而是以代码的方式动态获取屏幕的尺寸,然后根据屏幕的尺寸来写死子控件的frame。...1.2.2.代码中使用Autoresizing 我们不仅可以在storyboard中使用Autoresizing来约束父子视图,也可以使用代码来设置父子视图之间的位置关系。...不难发现,这样以位移的方式指定autoresizingMask枚举值,也契合了storyboard中可以给子控件设置多个方向的约束的情景。如下图: ?...控制器的view的autoresizing 注意:如果我们在storyBoard中选中控制器的view,然后在尺寸检查器中查看会发现,autoresizing中控制子控件的宽度和高度的虚线自动变成了实线...这也再次验证了,我们在不同的sizeClass下的布局并不会相互影响。 我们在W Regular H Compact状态下的布局不是说好了“只会”出现在5.5英寸的横屏状态下吗?

8.5K70
  • iOS学习——UIView的研究

    在iOS开发中,我们知道有一个共同的基类——NSObject,但是对于界面视图而言,UIView是非常重要的一个类,UIView是很多视图控件的基类,因此,对于UIView的学习闲的非常有必要。...129 /** 将像素point由point所在视图转换到目标视图view中,返回在目标视图view中的像素值 */ 130 - (CGPoint)convertPoint:(CGPoint)point...>)coordinateSpace NS_AVAILABLE_IOS(8_0); 133 /** 将rect由rect所在视图转换到目标视图view中,返回在目标视图view中的rect */ 134...@property(nullable, nonatomic,readonly) UIView *superview; 238 /** 获取所有子视图 */ 239 @property(nonatomic...:(NSInteger)index2; 249 250 /** 添加子视图(新添加的视图在subviews数组的后面, 显示在最上面) */ 251 - (void)addSubview:(UIView

    2.8K80

    IOS开发系列——UIView专题之五:常用开发技巧篇

    如果一个子视图的区域超过父视图的bound区域(父视图的clipsToBounds属性为NO,这样超过父视图bound区域的子视图内容也会显示),那么正常情况下对子视图在父视图之外区域的触摸操作不会被识别...UITouch对象在触摸操作的过程中在不断变化,所以在使用UITouch对象时,不能直接retain,而需要使用其他手段存储UITouch的内部信息。...UIScrollView 5.1.5通过UIView对象获取其所属UIViewController 通过UIView对象获取该对象所属的UIViewController可以使用UIResponder...If there is noview controller, the method will return the superview 相关代码如下:遍历该View的树形结构,获取到其所属的ViewController...所在视图转换到目标视图view中,返回在目标视图view中的rect •- (CGRect)convertRect:(CGRect)recttoView:(UIView*)view; •//将rect

    1.2K20

    在线等,挺急的!

    这是一个可以节省 70% 工作量的话题 我觉得,如果真的能把一张设计图自动转换为代码,任何开发工程师都会感兴趣的.单以 iOS 应用为例, 在一个最常用的MVC架构的APP中,主要的代码,无非就是集中于...我想我对编程本身确实是感兴趣的,但是整天浪费时间在 UI上,真的感觉有点虚度光阴.所以说,在本不充裕的空闲里,我一直在思考的一个命题就是: 如何实现 UI 的自动化与独立化....子视图对应的属性,模块中应有属性与其对应,且可通过此属性访问对应的子视图. extern const NSString * YFViewComponentSubViewHolderWidthKey...这是与数据结合之后的效果图.只是个初稿,还需要进一步调试.也就是说,以后再写UI界面,你的注意力将可以集中在 数据与视图本身的交互处理上....基于masonry的视图模块化方案.在以后的工作和学习中,我会继续使用与完善,以期进一步提高写UI界面的效率.可能尚有不完备之处,欢迎大家共同提出讨论.

    1.4K60

    iOS14适配【解决UITableViewCell兼容问题(往cell添加子视图的方式不规范)】

    2.2.1 cell.subviews 2.2.2 通过superview 获取cell的也需做相关修改 2.1 全局修改 2.2 注意事项 2.3 使用到的工具类 see also 前言 今天升级最新...Xcode自带的DebugViewHierarchy视图分析发现问题的原因是:被系统自带的UITableViewCellContentView遮挡在底部了 ?...关于视图层级分析你也可以使用私有API _printHierarchy和recursiveDescription 在lldb 窗口进行分析: 例如先打印VC层级(lldb) po [[[UIWindow...比如获取子视图采用cell.subviews 也要记得修改为 cell.contentView.subviews....UIButton * btn = cell.contentView.subviews[2-1]; 2.2.2 通过superview 获取cell的也需做相关修改 经过全局hook之后,以下的代码就是错误的

    2.6K20

    iOS布局之AutoresizingMask和AutoLayout

    一.AutoResizing 我们在使用AutoResizing进行布局的时候,其主要思想就是设置子视图跟随父视图的frame变化而变化。具体的情况,我们可以设置左跟随,右跟随等等。...superView.frame = CGRectMake(0, 0,200 , 200); 以上代码中我们设置了子视图的宽度随父视图的变化而改变,其效果图如下: ?...屏幕快照 2016-09-18 下午4.53.23.png 我们可以看到,图中的子视图的宽度也随着父视图的宽度增加到了二倍。这就是AutoResizing的一个最简单的应用。...在我们在实际使用时,还有很多的相关属性可以设置。...在实际的使用过程中,我还需要注意两点: 1.当我们设置这个属性为YES的时候,view的布局结果由AutoResizingMask,frame,center这些因素共同决定,如果再在其上添加AutoLayout

    1.9K60

    iOS-屏幕适配实现(Autoresizing)

    ,Autoresizing就是一个相对于父控件的布局解决方法 在Xcode5之后,新建的项目默认使用AutoLayout。...Autoresizing 举个例子: 当我们将左边和上面虚线变成实线时,代表子控件和父控件在这个方向上的间距被固定 当我们点击子视图内部的虚线时,同样也变为实线,代表子视图的宽度或者高度被固定了...,那么我们千万不能固定子控件的宽度(反应在storyBoard中的设置,也就是必须使控制子控件宽度的虚线变为实线)。...同理, 如果垂直方向同时固定了上边距和下边距,那么我们不能固定子控件的高度(反应在storyBoard中的设置,也就是必须使控制子控件高度的虚线变为实线) Autoresizing缺点 Autoresizing...可以满足大部分简单的自动布局需求,可是它有一个致命的缺陷,它只能设置子视图相对于父视图的变化,却不能精确这个变化的度是多少,因此对于复杂的精准的布局需求,它就力不从心了

    27510

    【IOS开发基础系列】UIView专题

    2.获取UIwindow (1)[UIApplication sharedApplication].windows          在本应用中打开的UIWindow列表,这样就可以接触应用中的任何一个...- (BOOL)isDescendantOfView:(UIView *)view 参数 view     一个视图用来测试子视图在视图层次中的关系 返回值     如果接收者是视图的子视图就返回YES...    子类可以重写这个方法来提供一些特定的必要实现 willRemoveSubview:     由子类重写用来在子视图从接收者视图中移除前执行一些特定的方法。...消息或者子视图从接收者视图层次中移除因为它要被添加到其他视图了 3 UIView动画 3.1 概述         UIView视图的动画功能,可以使在更新或切换视图时有放缓节奏、产生流畅的动画效果,进而改善用户体验...2.在容器视图中设置转换。 3.在容器视图中移除子视图。 4.在容器视图中添加子视图。 5.结束动画块。

    70630

    iOS小技能: 解决UITableViewCell兼容问题(iOS14适配)

    原因:往cell添加子视图的方式不规范,导致contentView 置于自定义控件的上层,引发界面无响应(注意处理相关方法) I 问题分析 iOS14 UITableViewCell的子试图不能点击或者滑动等手势响应问题...(但是苹果迟早会限制高于Xcode12才可以上传appstore,所以一旦使用了不规范的代码,早晚都要面临这个问题) 1.1 其他分析视图层级的方法:私有API _printHierarchy 和recursiveDescription...关于视图层级分析你也可以使用私有API _printHierarchy 和recursiveDescription 在lldb 窗口进行分析: 例如先打印VC层级 (lldb) po [[[UIWindow...例如125个文件的1452个地方使用错误的方法,这个如果不使用hook高质工作量有点大 所以通过Runtime hook cell的addSubView 方法强制修改为正确的添加cell 子视图的方式...比如获取子视图采用cell.subviews 也要记得修改为 cell.contentView.subviews.

    1.5K30

    addSubView需要注意的几个点为什么要在addsubview:一个view对象后,release它?

    译:增加一个视图到接收者的子视图列表中。 - (void)addSubview:(UIView *)view Parameters view The view to be added....译:view参数代表被增加的view,这个view会被它的接收者retain一次(即引用计数+1)。增加完成之后,这个view将出现在接收者的其他子视图的上面。...ps:关于子视图的出现的层次的问题,可以从这些子视图被保存的数据结构来探寻答案 ,每个视图都有个数组的属性,subviews,这个就是保存的它的子视图的引用。...ps:在removeFromSuperview里已经说过,其实视图直接的操作往往牵涉到两个方面的操作,一个是视图的数据结构,一个是响应者链。当然,addsubview也不例外。...superview before making the receiver its new superview.

    1.4K100

    iOS界面布局之二——初识autolayout布局模型

    1、了解几种约束     点击xcode的storyboard文件,在xcode的导航栏上点击Edito,然后选择Pin,可以看到如图,其中是可以添加的约束类型。 ?...to Superview:与父视图左边界的约束 Trailing Space to Superview:与父视图右边界的约束 Top Space to Superview:与父视图上边界的约束 Bottom...我们在storyboard中拖入三个label,使它们如下效果: ? 然后我们将屏幕横过来,会发现这时的效果并不是我们想得到的结果: ?...这就是我们想要的结果了。 3、自动布局的几种对其方式     在xcode导航的Editor菜单中,还有一个子菜单,Align,这里面的选项可以为控件添加对其约束: ?...2、切莫画蛇添足,矛盾的约束会使xcode晕掉,所以在添加约束前,我建议将试图间的布局关系先整理出来。

    1K30

    iOS11UINavigationBar的item左右间距调整

    相信很多同学都知道在iOS7之后调整导航栏两侧按钮距离左右间距,其实就是在左右barButtonItem的数组中添加一个宽度为负的占位item。...可以用xcode查看视图层次,以方便理解。...一个新界面之后再返回回来之后位置就还原了  解决方案其实很简单,只要将设置leftItem的方法写在viewWillAppear中即可,这样即可保证约束不会被系统重置。...现在有一个终极解决方案: UINavigationBarContentView平铺在导航栏中作为iOS11的各个按钮的父视图,该视图的所有的子视图都会有一个layoutMargins被占用,也就是系统调整的占位...,我们只要把这个置空就行了.那样的话该视图下的所有的子视图的空间就会变成我们想要的那样,当然为了保险起见,该视图的父视图也就是bar的layoutMargins也置空,这样 整个bar就会跟一个普通视图一样了

    1.5K30

    iOS11UINavigationBar的item左右间距调整

    相信很多同学都知道在iOS7之后调整导航栏两侧按钮距离左右间距,其实就是在左右barButtonItem的数组中添加一个宽度为负的占位item。...可以用xcode查看视图层次,以方便理解。...一个新界面之后再返回回来之后位置就还原了  解决方案其实很简单,只要将设置leftItem的方法写在viewWillAppear中即可,这样即可保证约束不会被系统重置。...现在有一个终极解决方案: UINavigationBarContentView平铺在导航栏中作为iOS11的各个按钮的父视图,该视图的所有的子视图都会有一个layoutMargins被占用,也就是系统调整的占位...,我们只要把这个置空就行了.那样的话该视图下的所有的子视图的空间就会变成我们想要的那样,当然为了保险起见,该视图的父视图也就是bar的layoutMargins也置空,这样 整个bar就会跟一个普通视图一样了

    3.2K50

    iOS 面向协议封装全屏旋转功能

    关于使用面向协议来封装功能的实战可以参考我上篇文章 【iOS 面向协议方式封装空白页功能】,这里就不再赘述,我们直接进入使用阶段吧。...指定即将全屏的视图 superView UIView? 作为退出全屏后specifiedView的父视图 config FullScreenableConfig?...,由于代码内部已经经过自动视图填写,所以直接调用相应的方法即可,当然也可以自己指定specifiedView和superView ?...lxf_FullScreenable_3 结语 到这里相关的说明已罗列完毕,有什么不清楚的可以下载Demo看看,或者在文章下方留言提问 LXFProtocolTool 主要是通过协议的方式来方便快捷地实现一些的实用功能...如果你有什么想实现的功能也可以提出来,喜欢的就给个Star鼓励下我吧 ? ? ?,感谢支持!

    1.1K60

    【IOS开发基础系列】Autolayout自动布局专题

    1 简介         bounds是指这个view在它自己坐标系的坐标和大小 而frame指的是这个view在它superview的坐标系的坐标和大小区别主要在坐标系这一块。...在接着后面-[]中括号里面对当前的View/控件 的高度/宽度进行设定; options:字典类型的值;这里的值一般在系统定义的一个enum里面选取; metrics:nil;一般为nil,参数类型为NSDictionary...//设置子视图的宽度和父视图的宽度相同 [self.view addConstraint: [NSLayoutConstraint constraintWithItem: v1 attribute:...界面配置自动布局要点:     1、对于一个视图内同级别的子视图,要配就全部都配置成自动布局;     2、对于每个视图,无法上下左右四个方向上的设置,一定要设置全;     3、对于TableView...4.1.2 Constraint可以只使用部分,细节控件可去代码中做 4.1.3 Constraint中设计的布局一定与代码中设计得布局保持一致         使用Storyboard进行布局设计后,

    34940

    Masonry

    首先,从定义就可以看出,DSL 也是一种编程语言,只不过它主要是用来处理某个特定领域的问题。 下边介绍iOS中如何实现链式调用的DSL。...,平时在我们开发当中,我们可能需要通过初始化来确定一些属性的值,并不想由外界来修改它,于是我们可能会需要些很多个initWith方法,加入我的这个对象有姓名、性别、年龄等属性,但是我初始化的时候,并不是所有地方都要知道这些信息...在我们开发过程中,我们会经常用到UILabel,每次初始化都要设置一堆的属性,比较麻烦,当然我们也可以采取类似如下方法:+ (UILabel *)createLabelWithFont:(UIFont...addSubview:label]; 不需要初始化的参数可以直接不写,只初始化我们需要的 总结 另外很多人担心自动布局的性能问题,事实上苹果已经在iOS12中对auto layout进行优化: WWDC2018...可以看到在iOS12之前auto layout性能会随着嵌套视图的增加呈指数增长,但是在iOS12上苹果官方已经对此进行了优化,随着嵌套视图的增加性能问题得到了大幅的提升。

    1.1K10
    领券