通常情况一般都是由view中的触发者(button)之类的事件,触发block,在控制器中处理。但是其实是可以在view中处理控制器跳转的。
在controller不需要回传数据的时候,可以在view中这样写,能够减少控制器中的代码。
大概思路:点击控件始终是加载在控制器上的,不断取superview,取到控制器时,这个控制器就是我们事件的响应者。
/// 处理事件
- (void)tapAction {
SearchDestinationVC *controller = [[SearchDestinationVC alloc]init];
controller.hidesBottomBarWhenPushed = YES ;
//通过找到的控制器进行跳转
[[self viewController].navigationController pushViewController:controller animated:YES] ;
}
找到view的控制器:返回view所加载在的控制器
/// 找到view的控制器:返回view所加载在的控制器
- (UIViewController *)viewController {
for (UIView * superView = [self superview]; superView; superView = superView.superview) {
UIResponder *nextResponder = [superView nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]) {
return (UIViewController *)nextResponder;
}
}
return nil;
}
网友评论