文档章节

通过UIView获取UIViewController

壹峰
 壹峰
发布于 06/14 11:01
字数 162
阅读 9
收藏 0
点赞 0
评论 0

需求很简单,通过UIViewController.view内的任意控件获取当前UIViewController;

立马开写:

/**
 *    @brief    通过viewController内的view,获取Controller
 * 
 *    @param     view     subView
 *
 *    @return    UIViewController
 */
- (UIViewController *)recursionView2ViewController:(UIView *)view
{
    __block UIViewController *viewController;
    __block void (^blocks)(UIView *) = nil;
    blocks = ^(UIView *view)
    {
        if([view.superview isKindOfClass:NSClassFromString(@"UIViewControllerWrapperView")])
        {
            Ivar ivar = class_getInstanceVariable([UIView class], "_viewDelegate");
            viewController = object_getIvar(view, ivar);
        }
        else blocks(view.superview);
    };
    blocks(view);
    return viewController;
}

功能实现;

自豪之余,发现朋友发出新方法:

- (UIViewController *)findViewController:(UIView *)sourceView
{
    id target=sourceView;
    while (target) {
        target = ((UIResponder *)target).nextResponder;
        if ([target isKindOfClass:[UIViewController class]]) {
            break;
        }
    }
    return target;
}

当然,他是百度的(鄙视之);

两人刚准备兴奋发现另一人发出:

//nav为root UINavigationController
UIViewController *viewController = ((AppDelegate *)[UIApplication sharedApplication].delegate).nav.visibleViewController;

当时我们就震惊了~~~

本文转载自:https://www.cnblogs.com/maxfong/p/3423633.html

共有 人打赏支持
壹峰
粉丝 7
博文 513
码字总数 7238
作品 0
广州
其他
iOS 根据view获取当前的UIViewController

//获取当前的UIViewController+ (UIViewController )currentVCWithCurrentView:(UIView )view{ }

Lambda8421 ⋅ 2016/05/12 ⋅ 0

iOS 7:自定义导航转场动画以及更多

在iOS7以前,开发者如果希望定制导航控制器推入推出视图时的转场动画,一般都只能通过子类化UINavigationController或者自己编写动画代码去覆盖相应的方法,现在iOS7为开发者带来了福音,苹果...

zhangjiansong0 ⋅ 2014/06/10 ⋅ 0

loadView、viewDidLoad及viewDidUnload的关系

标题中所说的3个方法,都是UIViewController的方法,跟UIViewController的view属性的生命周期息息相关。接下来我会一一阐述它们的作用以及它们之间的联系。 loadView 1.什么时候被调用? 每次...

啊子同 ⋅ 2015/12/29 ⋅ 0

loadView、viewDidLoad及viewDidUnload的关系

loadView、viewDidLoad及viewDidUnload的关系 标题中所说的3个方法,都是UIViewController的方法,跟UIViewController的view属性的生命周期息息相关。接下来我会一一阐述它们的作用以及它们之...

法斗斗 ⋅ 2016/03/08 ⋅ 0

UIWindow 窗口 & UIView 视图 等相关显示类

在iPhone开发中,一个应用程序应该只有一个UIWindow的实例,UIWindow在iPhone中是UIView的一个特殊子类,在程序初始化时,通过装载MainWindow.xib或者在代码中创建,它的大小应该就是手机屏幕...

JohnZr ⋅ 2012/08/02 ⋅ 0

loadView、viewDidLoad及viewDidUnload的关系

标题中所说的3个方法,都是UIViewController的方法,跟UIViewController的view属性的生命周期息息相关。接下来我会一一阐述它们的作用以及它们之间的联系。 一、loadView 1.什么时候被调用?...

长平狐 ⋅ 2013/03/28 ⋅ 0

Swift标配开源库--Reusable

Reusable是一个在swift下使用的开源库。利用protocol extension结合泛型提供了一个优雅的方案来dequeueReusableCell。 使用 根据类型获取cell 让你的cell声明Reusable或NibReusable协议 //如...

匿名 ⋅ 2016/07/26 ⋅ 0

updateViewConstraints和updateConstraints 

updateViewConstraints和updateConstraints - (void)updateViewConstraints NSAVAILABLEIOS(6_0); UIViewController中也新增了一个更新布局约束的方法,在AutoLayout UIView相关API的笔记中,......

法斗斗 ⋅ 2016/09/13 ⋅ 0

iOS UIViewController 应用要点

iOS UIViewController 应用要点 1. 视图控制对象有一个类型为UIView的属性view。这个视图通常会有子视图,例如按钮和标签。视图控制对象通常是UIViewController的子类。拥有一个名为view的实...

xiaofer2008 ⋅ 2013/02/22 ⋅ 0

解决利用MWPhotoBrower跳转时的问题

问题描述: 在IOS开发过程中进场遇到页面的嵌套,比方说在一个UIViewController下面嵌套三个UITableBViewController,这样在UItableViewController中点击图片或是按钮进行push方式跳转时就会...

刘兆伟 ⋅ 2015/05/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 26分钟前 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

vim编辑模式、vim命令模式、vim实践

vim编辑模式 编辑模式用来输入或修改文本内容,编辑模式除了Esc外其他键几乎都是输入 如何进入编辑模式 一般模式输入以下按键,均可进入编辑模式,左下角提示 insert(中文为插入) 字样 i ...

蛋黄Yolks ⋅ 昨天 ⋅ 0

大数据入门基础:SSH介绍

什么是ssh 简单说,SSH是一种网络协议,用于计算机之间的加密登录。 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码...

董黎明 ⋅ 昨天 ⋅ 0

web3j教程

web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 汇智网最新发布的web3j教程,详细讲解...

汇智网教程 ⋅ 昨天 ⋅ 0

谷歌:安全问题机制并不如你想象中安全

腾讯科技讯 5月25日,如今的你或许已经对许多网站所使用的“安全问题机制”习以为常了,但你真的认为包括“你第一个宠物的名字是什么?”这些问题能够保障你的帐户安全吗? 根据谷歌(微博)安...

问题终结者 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部