博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过UIView获取UIViewController
阅读量:5794 次
发布时间:2019-06-18

本文共 1256 字,大约阅读时间需要 4 分钟。

  hot3.png

需求很简单,通过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 UINavigationControllerUIViewController *viewController = ((AppDelegate *)[UIApplication sharedApplication].delegate).nav.visibleViewController;

当时我们就震惊了~~~

转载于:https://my.oschina.net/huqiji/blog/1830088

你可能感兴趣的文章
阅读Spring源代码(1)
查看>>
grep 命令
查看>>
JS二维数组的声明和使用
查看>>
v$archive_gap dg dataguard 断档处理 scn恢复
查看>>
问责IT风险管理:CIO需关注两个重点
查看>>
Winform打包发布图解
查看>>
PDF文件怎么编辑,超简单的方法
查看>>
EasyUI基础入门之Easyloader(载入器)
查看>>
Uva 839 Not so Mobile
查看>>
30款超酷的HTTP 404页面未找到错误设计
查看>>
程序猿必备 MyEclipse2013-2014系列
查看>>
java中ArrayList 、LinkList区别
查看>>
Spring ’14 Wave Update: Installing Dynamics CRM on Tablets for Windows 8.1
查看>>
利用rand7()构造rand10()
查看>>
MySQL 备份与恢复
查看>>
吃午饭前,按书上的代码写会儿--Hunt the Wumpus第一个版本
查看>>
easyui中combobox的值改变onchang事件
查看>>
TEST
查看>>
威胁快报|ProtonMiner挖矿蠕虫扩大攻击面,加速传播
查看>>
PAT A1037
查看>>