ios获取当前view所在的viewController

有的时候,我们需要在某个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];就可以顺利拿到这个控制器了。

但是其实苹果并不推荐这么做,这样做违反了苹果的设计原则,即合适的地方干合适的事,除非确实有这种需要,否则还是少用为妙!希望上面的介绍对你有帮助!

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

推荐阅读更多精彩内容