尽管通过UIView获得UIViewController操作时,或许会与MVC的原则背道而驰,但这样做是可以提高开发效率的,所以建议可以用但尽量少用。
UIView获得UIViewController的方法:
UIViewController* vc = [UIViewController alloc] init;
for (UIView* next = [self superview]; next; next = next.superview) {
UIResponder* nextResponder = [next nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]) {
vc = (UIViewController*)nextResponder;
}
也可改写成UIView的一个分类放进去备用:
#import <UIKit/UIKit.h>
@interface UIView (Extend)
@end
@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
本文介绍了如何在Objective-C中,通过UIView找到其所在的UIViewController,虽然这可能违反MVC原则,但能提升开发效率。提供了两种实现方式,包括遍历superview链和创建UIView的分类扩展。
732

被折叠的 条评论
为什么被折叠?



