有的时候,我们需要在某个view中获取到这个view所在的控制器,以便进行controller相关的操作,比如push到一个新的控制器,下面就介绍一下如何获取。
我们可以为UIView写一个分类,如下:
.h文件中:
#import <UIKit/UIKit.h>
@interface UIView (KFGetController)
//获取当前view所在的控制器
- (UIViewController *)viewController;
@end
.m文件中:
#import "UIView+KFGetController.h"
@implementation UIView (KFGetController)
- (UIViewController *)viewController
{
//获取当前view的superView对应的控制器
UIResponder *next = [self nextResponder];
do {
if ([next isKindOfClass:[UIViewController class]]) {
return (UIViewController *)next;
}
next = [next nextResponder];
} while (next != nil);
return nil;
}
@end
写完这个分类之后,就可以在需要获取控制器view中调用
UIViewController *controller = [self viewController]; 得到的这个controller就是当前view所在的控制器。
如果是在某个自定义view中,而这个view会被添加到某个viewController的view中,此时需要在这个自定义view的
- (void)willMoveToSuperview:(UIView *)newSuperview
在这个方法中调用[newSuperView viewController];就可以顺利拿到这个控制器了。
但是其实苹果并不推荐这么做,这样做违反了苹果的设计原则,即合适的地方干合适的事,除非确实有这种需要,否则还是少用为妙!希望上面的介绍对你有帮助!
网友评论