通过UIView获取UIViewController

原文地址

通过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;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、禁止手机睡眠 [UIApplicationsharedApplication].idleTimerDisabl...
    小热狗阅读 918评论 0 2
  • 1、禁止手机睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa阅读 1,142评论 1 6
  • 畅游书海 不爱喝咖啡的人,说咖啡苦涩;爱喝咖啡的人,说咖啡香浓。同是一杯咖啡,为什么会有两种体会呢?吾曰:“心境不...
    钝角阅读 978评论 1 53
  • 如果相逢是缘,这份缘又总是来去匆匆,缘来缘去就像海面的浮萍,短暂的相聚就面临各分东西,情感也许是最脆弱的,经不起暴...
    饒親阅读 324评论 0 0
  • 十九朵白玫瑰,快递过来的。匿名人士。众人围观着,竟掀起一小阵高潮,唯独收花的主人笑而不语。脸上却呈现...
    暮影飞去阅读 238评论 0 0