我有一个方法可以找到视图的parentVC:
-(UIViewController *)mainViewController {
UIViewController *viewController = nil;
for (UIView *next = [self superview]; next; next = next.superview) {
UIResponder *nextResponder = [next nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]) {
viewController = (UIViewController *)nextResponder;
break;
}
}
return viewController;
}
我希望将来只能使用parentVC
,这是我打算制作的一个宏。
唯一的问题是,我不知道如何将其转换为宏,以便我可以说出像parentVC.view.alpha = 0.5f;
我假设宏会以某种方式利用块,所以它可以处理这个迭代,找到父VC,同时仍然可以被视为一个对象?但我无法弄清楚它是如何起作用的。
答案 0 :(得分:0)
能够以下列形式使用块:
((^NSObject*(void){/*logic+return here*/})())
最终宏:
#define parentVC (\
(^UIViewController*(void){\
UIViewController *viewController = nil;\
for (UIView *next = [self isKindOfClass:[UIViewController class]]?[((UIViewController *)self).view superview]:[((UIView *)self) superview]; next; next = next.superview) {\
UIResponder *nextResponder = [next nextResponder];\
if ([nextResponder isKindOfClass:[UIViewController class]]) {\
viewController = (UIViewController *)nextResponder;\
break;\
}\
}\
return viewController;\
})()\
)