首页
学习
活动
专区
工具
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可以控件设置多个方向约束情景。如下图: ?...控制器viewautoresizing 注意:如果我们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,返回目标视图viewrect */ 134...@property(nullable, nonatomic,readonly) UIView *superview; 238 /** 获取所有视图 */ 239 @property(nonatomic...:(NSInteger)index2; 249 250 /** 添加视图(新添加视图subviews数组后面, 显示最上面) */ 251 - (void)addSubview:(UIView

    2.7K80

    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,返回目标视图viewrect •- (CGRect)convertRect:(CGRect)recttoView:(UIView*)view; •//将rect

    1.1K20

    在线等,挺急!

    这是一个可以节省 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...可以满足大部分简单自动布局需求,可是它有一个致命缺陷,它只能设置视图相对于父视图变化,却不能精确这个变化度是多少,因此对于复杂精准布局需求,它就力不从心了

    26310

    【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.结束动画块。

    62830

    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 celladdSubView 方法强制修改为正确添加cell 视图方式...比如获取视图采用cell.subviews 也要记得修改为 cell.contentView.subviews.

    1.4K30

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

    1K30

    iOS11UINavigationBaritem左右间距调整

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

    1.5K30

    iOS11UINavigationBaritem左右间距调整

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

    3.2K50

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

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

    1K60

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

    1 简介         bounds是指这个view它自己坐标系坐标和大小 而frame指的是这个viewsuperview坐标系坐标和大小区别主要在坐标系这一块。...接着后面-[]括号里面对当前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进行布局设计后,

    33640

    Masonry

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

    1.1K10

    两个宏快速计算九宫格X、Y坐标

    另一种方式是根据行高、列宽动态计算每个格子位置,后者这种纯计算方式我们写一次就够了。今天带给大家两个写好宏,以后制作九宫格,我们直接用这个宏即可!.../** 设置格子X坐标 * SUPERVIEW 指九宫格每个小格子视图 * WIDTH 指九宫格每个小格子宽度 int width = (VVS_SCREEN_WIDTH - (colunm...% COLUMN * WIDTH + (SUPERVIEW.subviews.count % COLUMN + 1) * MARGIN /** 设置格子Y坐标 * SUPERVIEW 指九宫格每个小格子视图.../ COLUMN * HEIGHT + (SUPERVIEW.subviews.count / COLUMN + 1) * MARGIN 前提:使用这两个宏前提是我们必须要把格子单独放到一个父视图上...另外,使用这个宏时,一旦格子被创建出来就必须加到superView,不能等到所有的格子都创建好后再一起加到父视图。 上面第一个宏是可以计算每个格子X坐标。第二个宏可以计算每个格子Y坐标。

    5.6K30
    领券