6月30日更新Swift版本.
摘自我的GitHub
https://github.com/RoJoHub/LHPackage
Swift
class func getAppTopController()->UIViewController{
var topController :UIViewController? = UIApplication.shared.keyWindow!.rootViewController
while topController?.presentedViewController != nil {
topController = topController?.presentedViewController;
}
return topController!;
}
class func attachViewController(view:UIView)->UIViewController?{
let controller:UIViewController?
var superView:UIView?=view.superview
var nextResponder:UIResponder?
while superView != nil {
nextResponder=nextResponder?.next
if (nextResponder?.isKind(of: UIViewController.self))! {
controller=nextResponder as! UIViewController!
return controller
}
superView=superView?.superview
}
return nil
}
Objective-C
//顶级控制器
- (void)getCurrentVC
{
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topController.presentedViewController) {
topController = topController.presentedViewController;
}
_viewController=topController;
}
//当前视图
-(UIViewController *)currentViewController{
UIViewController *vc;
for (UIView* next = [self superview]; next; next = next.superview) {
UIResponder* nextResponder = [next nextResponder];
if ([nextResponder isKindOfClass:[objc_getClass("UIViewController") class]] ) {
vc=(UIViewController*)nextResponder;
return vc;
}
}
return vc;
}
//获取UIView所在的视图控制器(UIViewController)
(1)UIView-Extent.h
#import <UIKit/UIKit.h>
@interface UIView (Extend)
- (UIViewController *)viewController;
@end
(2) UIView-Extent.m
#import "UIView+Extend.h"
@implementation UIView (Extend)
- (UIViewController*)viewController {
for (UIView* next = [self superview]; next; next = next.superview) {
UIResponder* nextResponder = [next nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]) {
return (UIViewController*)nextResponder;
}
}
return nil;
}
@end