前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >iOS 根据UIView获取所在的UIViewController

iOS 根据UIView获取所在的UIViewController

作者头像
赵哥窟
发布于 2018-09-13 03:53:38
发布于 2018-09-13 03:53:38
2.5K00
代码可运行
举报
文章被收录于专栏:日常技术分享日常技术分享
运行总次数:0
代码可运行
简述

本文将讲述在iOS开发中如何根据某个UIView来获取所属的UIViewController

UIResponder

在iOS中UIResponder类是专门用来响应用户的操作处理各种事件的,包括触摸事件(Touch Events)、运动事件(Motion Events)、远程控制事件(Remote Control Events)。我们知道UIApplication、UIView、UIViewController这几个类是直接继承自UIResponder,所以这些类都可以响应事件。当然我们自定义的继承自UIView的View以及自定义的继承自UIViewController的控制器都可以响应事件。

通过响应链查找视图控制器,nextResponder获取下一个响应者,响应者顺序为:

20170512174229676.png

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (UIViewController *)getControllerFromView:(UIView *)view {
    // 遍历响应者链。返回第一个找到视图控制器
    UIResponder *responder = view;
    while ((responder = [responder nextResponder])){
        if ([responder isKindOfClass: [UIViewController class]]){
            return (UIViewController *)responder;
        }
    }
    // 如果没有找到则返回nil
    return nil;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.09.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
IOS触摸事件分发机制详解
本文主要介绍了iOS事件传递机制,包括Touch Event、Mouse Event和Gesture Event。首先介绍了事件传递的整个流程,然后重点讲解了Touch Event、Mouse Event和Gesture Event的传递流程和区别。最后列举了一些常见应用解决方案,如扩大按钮点击区域、子视图消息传递给父视图等。
MelonTeam
2018/01/04
3.6K4
IOS触摸事件分发机制详解
iOS 事件体系知识及原理小记
本文介绍了iOS事件体系中的一些基本概念和原理,包括UITouch、UIEvent、UIResponder、响应链、以及UIView和UIViewController对象在事件响应中的作用。同时,也简单介绍了一些与事件响应相关的属性、方法和用途。
MelonTeam
2018/01/04
1.3K0
iOS 事件体系知识及原理小记
IOS开发系列——UIView专题之四:事件分发机制篇【整理,部分原创】
iOS中的事件大概分为三种,分别是Milti-Touch Events, Motion Events和Remote Control Events(events for controlling multimedia)。
江中散人_Jun
2022/03/08
7250
IOS开发系列——UIView专题之四:事件分发机制篇【整理,部分原创】
iOS中手势的应用1. 四类事件的主要方法2. 响应者链3. 手势识别功能(Gesture Recognizer)4. 手势的使用
iOS设备现如今大受欢迎的最重要原因之一就在于其开创了触控操作的潮流。发展到现在,无论是Android还是iPhone,现在APP与用户进行交互,基本上都是依赖于各种各样的触控事件。例如用户对屏幕进行了侧滑,APP就需要对这个手势进行相应的处理,给用户一个反馈。这些相应的事件就都是在UIResponder中定义的。 广告插播的措不及防:如果您要是觉得这篇文章让您有点收获,随手点个赞会让俺兴奋好久吶。 UIResponder大体有四类事件:触摸、加速计、远程控制、按压(iOS9.0以后出来的,3DTou
stanbai
2018/06/28
2.3K0
IOS开发系列——UIView专题之五:常用开发技巧篇
blurView.backgroundColor= [UIColorcolorWithRed:0green:0blue:0alpha:0.3];
江中散人_Jun
2022/03/08
1.2K0
京东七鲜一面总结
HTTP 是应用层协议,他的工作还需要数据层协议的支持,最常与它搭配的就是 TCP 协议(应用层、数据层是 OSI 七层模型中的,以后有机会会说到的)。TCP 协议称为数据传输协议,是可靠传输,面向连接的,并且面向字节流的。
Swift社区
2021/11/26
4040
iOS 小技能: Responder Chain(响应者链)【下篇】
4个触摸事件处理方法中,都有NSSet *touches和UIEvent *event两个参数。
公众号iOS逆向
2022/08/22
9800
iOS 小技能: Responder Chain(响应者链)【下篇】
Event官方文档
当系统传递一个touch event,首先会send到一个特定的view。对于touch view来讲,这个view就是被hitTest:withEvent:返回的view;对于shaking-motion event,remote-control事件,action messages,和editing-menu message, view就是firstResponder。如果initial view没有处理event,他就会沿着响应链去查找,顺序为: a) hit-test view或者firstResponder会传递event或者message到它的vc上(如果有的话);如果没有vc,则将event或者message传到superView上 b) 如果view或者vc不能handle event或者message,会传到view的superview上。 c) 之后的所有superView会根据a、b的模式进行传输,如果无法handle的话 d) view树的最上层的view,如果无法handle event或者message,会把event send到window对象 e) 如果UIWindow对象无法handle的话,会传递到application对象单例上 f) 如果application单例无法处理event或者message,则discards。
nimomeng
2018/09/13
2.1K0
iOS中的事件的产生和传递
●发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中,为什么是队列而不是栈?因为队列的特点是FIFO,即先进先出,先产生的事件先处理才符合常理,所以把事件添加到队列。
赵哥窟
2018/12/05
9150
iOS中的事件的产生和传递
iOS面试题:UIWindow,UIView,CALayer的区别
继承自UIView,是一种特殊的 UIView,通常在一个app中只会有一个keyUIWindow。
猿_人类
2019/07/01
8210
iOS面试题:UIWindow,UIView,CALayer的区别
编码篇-OC跨多层UI事件传递处理
在 iOS 中,对象间的交互模式大概有这几种:直接 property 传值、delegate、KVO、block、protocol、多态、Target-Action 等等,本文介绍的是一种基于 UIResponder 对象交互方式,简而言之,就是 通过在 UIResponder上挂一个 category,使得事件和参数可以沿着 responder chain 逐步传递。对于那种 subviews 特别多,事件又需要层层传递的层级视图特别好用,但是,缺点也很明显,必须依赖于 UIResponder 对象。
進无尽
2018/09/12
2.3K0
编码篇-OC跨多层UI事件传递处理
iOS小技能: 网络加载中处理、接口暂无数据处理、全局监听用户点击事件
在日常开发中经常涉及数据列表的查询,处理服务侧无数据返回的情况或者网络异常的手段是iOS必备小技能。
公众号iOS逆向
2022/08/22
7860
iOS小技能: 网络加载中处理、接口暂无数据处理、全局监听用户点击事件
iOS事件响应控制 原
    以前遇到一个项目,一个UIImageView对象上面有一个UIButton对象,然而项目的需求需要在点击 button的同时,UIImageView也接收到点击事件,在不使用代理和通知方法的前提下,通过事件响应链的原理,我们也可以很便捷的解决这个问题。
珲少
2018/08/15
5530
iOS事件响应控制
                                                                            原
UI篇-UIResponder之事件传递和响应精析
这篇文章只讨论触摸事件。对于触摸事件UIResponder内部提供了以下方法来处理事件:
進无尽
2018/09/12
2.5K0
UI篇-UIResponder之事件传递和响应精析
史上最详细的iOS之事件的传递和响应机制-原理篇
按照时间顺序,事件的生命周期是这样的:   事件的产生和传递(事件如何从父控件传递到子控件并寻找到最合适的view、寻找最合适的view的底层实现、拦截事件的处理)->找到最合适的view后事件的处理(touches方法的重写,也就是事件的响应)
VV木公子
2018/06/05
11.4K0
史上最详细的iOS之事件的传递和响应机制-原理篇
iOS 小技能: Responder Chain(响应者链)【上篇】
在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件,我们称之为“响应者对象”。
公众号iOS逆向
2022/08/22
1.1K0
iOS 小技能: Responder Chain(响应者链)【上篇】
iOS 中的事件响应
iOS 中的事件响应者主要分为两类,分别为UIResponder及UIGestureRecognizer,其中UIControl是一种比较特殊的UIResponder,所以本文将事件响应者分为以下三种类型进行讨论。
CoderStar
2022/08/24
2.8K0
iOS 中的事件响应
简述OC语言
对于一门语言的学习是需要时间领悟的,而对于一些原理性的问题,我们需要清楚其核心思想,知其然而知其所以然,这样才能有利于自己的后续发展。本文只是简述,没有面面具到(后续会持续更新)。
進无尽
2018/09/12
2.1K0
iOS开发--事件传递,响应者链条及常见面试题
在iOS中只有继承UIResponder的对象才能够接收并处理事件,UIResponder 是所有响应对象的基类,在UIResponder类中定义了处理上述各种事件的接口。我们熟悉的 UIApplication、 UIViewController、 UIWindow 和所有继承自UIView的UIKit类都直接或间接的继承自UIResponder,所以它们的实例都是可以构成响应者链的响应者对象,首先我们通过一张图来简单了解一下事件的传递以及响应.
猿_人类
2019/07/24
8630
iOS开发--事件传递,响应者链条及常见面试题
事件传递、响应者链条
响应者:继承UIResponder的对象称之为响应者对象,能够处理touchesBegan等触摸事件
Helloted
2022/06/06
8910
事件传递、响应者链条
推荐阅读
相关推荐
IOS触摸事件分发机制详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文