美文网首页iOS Developer
ios获取当前view所在的viewController

ios获取当前view所在的viewController

作者: coolLee | 来源:发表于2016-12-05 17:01 被阅读1758次

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

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

相关文章

网友评论

    本文标题:ios获取当前view所在的viewController

    本文链接:https://www.haomeiwen.com/subject/rrxlmttx.html