美文网首页
iOS事件响应链

iOS事件响应链

作者: 哥只是个菜鸟 | 来源:发表于2020-07-16 18:41 被阅读0次

UIView-->ViewController-->UIWindow-->UIAplication-->AppDelagate

UIView和UICLayer

  • UIView继承UIResponder,接收点击事件,CALayer直接继承 NSObject,并没有相应的处理事件的接口。
  • UIView是CALayer的delegate
  • UIView主要处理事件,CALayer负责绘制就更好

通过视图(view)获取该视图所在的控制器,通过响应链原理查找

+ (nullable UIViewController *)findBelongViewControllerForView:(UIView *)view {
    UIResponder *responder = view;
    while ((responder = [responder nextResponder]))
        if ([responder isKindOfClass: [UIViewController class]]) {
            return (UIViewController *)responder;
        }
    return nil;
}

获取当前控制器

- (UIViewController *)findCurrentViewController{
    UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController;
    while (1){
        if (vc.presentedViewController) {
            vc = vc.presentedViewController;
        } else if ([vc isKindOfClass:[UITabBarController class]]) {
            vc = ((UITabBarController*)vc).selectedViewController;
        } else if ([vc isKindOfClass:[UINavigationController class]]) {
            vc = ((UINavigationController*)vc).visibleViewController;
        } else {
            break;
        }
    }
    return vc;
}

如何在多次presentViewController后直接返回到指定层

UIViewController *controller = self;
    while(controller.presentingViewController != nil){
        controller = controller.presentingViewController;
    }
    [controller dismissViewControllerAnimated:YES completion:nil];

push之后时删除当前页面

 NSMutableArray *controllers = [[self.navigationController viewControllers]mutableCopy];
               for (UIViewController *vc in controllers) {
                             if ([vc isKindOfClass:[@"xxx" class]]) {
                                 [controllers removeObject:vc];
                                 break;
                             }
                         }
 [controllers addObject:vc];
 self.navigationController. viewControllers=controllers;

相关文章

  • iOS 响应链

    iOS开发 - 事件传递响应链iOS 响应者链,事件的传递事件传递之响应链Cocoa Touch事件处理流程--响...

  • 深入浅出iOS事件机制

    深入浅出iOS事件机制事件传递:响应链事件传递响应链

  • 二、事件传递链和响应者链

    iOS触摸事件详解iOS开发-事件传递响应链 响应者链 UIResponser包括了各种Touch message...

  • 响应链

    iOS事件响应链中Hit-Test View的应用从iOS的事件响应链看TableView为什么不响应touche...

  • iOS响应者链

    参考好文 iOS开发-事件传递响应链,用运行时分析 iOS事件传递:响应者链[译] http://www.jian...

  • 事件的响应链与传递链

    iOS事件链有两条:事件的响应链;Hit-Testing事件的传递链 响应链:由离用户最近的view向系统传递。i...

  • iOS 中事件的响应链和传递链

    iOS事件链有两条:事件的响应链;Hit-Testing事件的传递链 响应链:由离用户最近的view向系统传递。i...

  • iOS 中事件的响应链和传递链

    iOS事件链有两条:事件的响应链;Hit-Testing事件的传递链 响应链:由离用户最近的view向系统传递。i...

  • iOS中对于响应链的理解

    对于响应链的理解: 在IOS中,有响应者链对事件进行响应,所有的响应类都是UIResponder的子类,响应者链是...

  • iOS 中事件的响应链和传递链

    iOS 事件的主要由:响应连 和 传递链 构成。一般事件先通过传递链,传递下去。响应链,如果上层不能响应,那么一层...

网友评论

      本文标题:iOS事件响应链

      本文链接:https://www.haomeiwen.com/subject/qfxmhktx.html