迭代除 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;
}
我有一个自定义 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;
}