/**
* @brief 通过viewController内的view,获取Controller
*
* @param view subView
*
* @return UIViewController
*/
- (UIViewController *)recursionView2ViewController:(UIView *)view
{
__block UIViewController *viewController;
__block void (^blocks)(UIView *) = nil;
blocks = ^(UIView *view)
{
if([view.superview isKindOfClass:NSClassFromString(@"UIViewControllerWrapperView")])
{
Ivar ivar = class_getInstanceVariable([UIView class], "_viewDelegate");
viewController = object_getIvar(view, ivar);
}
else blocks(view.superview);
};
blocks(view);
return viewController;
}
或者
- (UIViewController *)findViewController:(UIView *)sourceView
{
id target=sourceView;
while (target) {
target = ((UIResponder *)target).nextResponder;
if ([target isKindOfClass:[UIViewController class]]) {
break;
}
}
return target;
}或者
//nav为root UINavigationController
UIViewController *viewController = ((AppDelegate *)[UIApplication sharedApplication].delegate).nav.visibleViewController;
本文将探讨在iOS开发中如何从一个View出发,通过不同的方法和技巧找到对应的ViewController。内容包括:使用superview chain、tag机制、User Defined Runtime Attributes、NSPredicate以及Swift的泛型等方法进行查找,同时分析各自的优缺点和适用场景。
5326

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



