通過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...
    小熱狗閱讀 927評論 0 2
  • 1、禁止手機睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa閱讀 1,144評論 1 6
  • 暢游書海 不愛喝咖啡的人,說咖啡苦澀;愛喝咖啡的人,說咖啡香濃。同是一杯咖啡,為什么會有兩種體會呢?吾曰:“心境不...
    鈍角閱讀 983評論 1 54
  • 如果相逢是緣,這份緣又總是來去匆匆,緣來緣去就像海面的浮萍,短暫的相聚就面臨各分東西,情感也許是最脆弱的,經不起暴...
    饒親閱讀 324評論 0 0
  • 十九朵白玫瑰,快遞過來的。匿名人士。眾人圍觀著,竟掀起一小陣高潮,唯獨收花的主人笑而不語。臉上卻呈現...
    暮影飛去閱讀 239評論 0 0