迭代除 UIContainerView 之外的所有内容

Iterate everything except UIContainerView

我有一个自定义 class(我从 SO 获得)来迭代 UIView 的所有子 class。我没有得到的是我无法添加代码来豁免 UIContainerView.

代码(UIView+Recursion.m):

- (NSMutableArray*)allSubViews
{
    NSMutableArray *arr= [[NSMutableArray alloc] init];
    [arr addObject:self];
    for (UIView *subview in self.subviews)
    {
        [arr addObjectsFromArray:(NSArray*)[subview allSubViews]];
    }
    return arr;
}

所以我想在for循环中添加,如果是UIContainerView,那么就不要添加到数组中。我尝试了什么:

- (NSMutableArray*)allSubViews
{
    NSMutableArray *arr= [[NSMutableArray alloc] init];
    [arr addObject:self];
    for (UIView *subview in self.subviews)
    {
        if (![subview isKindOfClass:[UIContainerView class]]) <-- error use of undeclared identifier
        [arr addObjectsFromArray:(NSArray*)[subview allSubViews]];
    }
    return arr;
}

完整的错误信息:

Use of undeclared identifier 'UIContainerView'

类别 class 似乎无法识别 UIContainerView?

您似乎希望检查私有 class,这就是您的代码无法编译的原因。如果这是你真正需要做的,那么你可以使用 NSClassFromString:

- (NSMutableArray *)allSubViews
{
    Class cvclass = NSClassFromString(@"UIContainerView");
    NSMutableArray *arr= [[NSMutableArray alloc] init];
    [arr addObject:self];
    for (UIView *subview in self.subviews)
    {
        if (![subview isKindOfClass:cvclass]) {
            [arr addObjectsFromArray:[subview allSubViews]];
        }
    }

    return arr;
}