通過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;

當時我們就震驚了~~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM