好吧,这是之前写的一些东西,在印象笔记中做了记录,现在转到简书中。实现了在 view 中获取控制器并进行界面跳转,写之前没怎么想,写完后才发现这么跳转并不好(ps:控制器的事,view 去做,有点越俎代庖),所以,只当是进行响应者链条的一个demo。
下面代码实现的效果是,让子 view 接收这些事件后,同时把这些事件继续向上传,会一直传到 UIApplication 为止。而在传的过程中,如果子 view 接收了这些事件,那么事件会自然终止,我们现在可以做的是同时让子 view 接收事件,而且还让事件不终止,并继续向上传。
#import "myView.h"
#import "SecondViewController.h"
@interface myView()
{
UIViewController *superVC;
}
@end
@implementation myView
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@"被点击了");
superVC = [self viewController:self];
// [superVC presentViewController:[SecondViewController new] animated:YES completion:nil];
[superVC.navigationController pushViewController:[SecondViewController new] animated:YES];
}
//获取响应链中的下一级响应,获取控制器,进行界面跳转
- (UIViewController *)viewController:(UIView *)view{
UIResponder *responder = view;
while ((responder = [responder nextResponder]))
if ([responder isKindOfClass: [UIViewController class]])
return (UIViewController *)responder;
return nil;
}