自定义递归

以UIView的viewWithTag为例
viewWithTag底层:先找子控件,不符合就再找子控件的子控件,再不符合就子控件的子控件的子控件
例:先找子控件A1,不符合就再找子控件A1的子控件A11,再不符合就子控件A1的子控件A11的子控件A111和A112,都不符合才返回上一层找下一个控件A12和A13,还是不符合就返回上一层找A2和A3

    -A11
        -A111
        -A112
    -A12
    -A13
-A2
-A3```

@implementation UIView

  • (UIView *)viewWithTag:(NSInteger)tag {
    // 如果自己的tag符合要求,就返回自己
    if (self.tag == tag) return self;

    // 遍历子控件,查找tag符合要求的子控件
    for (UIView *subview in self.subviews) {
    if (subview.tag == tag) return subview;

      UIView *resultView = [subview viewWithTag:tag];
      if (resultView) return resultView;
    

    }
    // 找不到符合要求的子控件
    return nil;
    }
    @end

你可能感兴趣的:(自定义递归)