在我的项目中遇到了cell中有点击响应事件,需要推出一个新的带导航栏UIViewController,但是cell是继承View的,不能推出界面。最初使用的是代理,调用父类ViewController去执行推出,但是中间遇到了问题,而且cell过多,使用代理过多出现了混乱。
于是就在cell中进行推出新界面,这就用到了View获区UIViewController的方法(后面几个方法是从网上查到,未测试过,写到一起为了方便以后查阅)
1、
UIResponder *objc = self.nextResponder;
while (objc != nil && ![objc isKindOfClass:[BasicViewController class]]) {
objc = objc.nextResponder;
}
BasicViewController *baseVC = (BasicViewController *)objc;
ScrollImageViewController * ScrollVC = [[ScrollImageViewController alloc]init];
ScrollVC.page = tagInt;
ScrollVC.Array = imageMuarr;
[baseVC.navigationController pushViewController:ScrollVC animated:YES];
2、
//nav为root UINavigationController
UIViewController *viewController = ((AppDelegate *)[UIApplication sharedApplication].delegate).nav.visibleViewController;
3、
- (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;
}
4、
- (UIViewController *)findViewController:(UIView *)sourceView
{
id target=sourceView;
while (target) {
target = ((UIResponder *)target).nextResponder;
if ([target isKindOfClass:[UIViewController class]]) {
break;
}
}
return target;
}