首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何遍历UIView的所有子视图,以及它们的子视图和子视图

如何遍历UIView的所有子视图,以及它们的子视图和子视图
EN

Stack Overflow用户
提问于 2010-05-01 01:35:34
回答 17查看 87.1K关注 0票数 86

如何遍历UIView的所有子视图,以及它们的子视图和子视图?

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2010-05-01 01:41:03

使用递归:

代码语言:javascript
复制
// UIView+HierarchyLogging.h
@interface UIView (ViewHierarchyLogging)
- (void)logViewHierarchy;
@end

// UIView+HierarchyLogging.m
@implementation UIView (ViewHierarchyLogging)
- (void)logViewHierarchy
{
    NSLog(@"%@", self);
    for (UIView *subview in self.subviews)
    {
        [subview logViewHierarchy];
    }
}
@end

// In your implementation
[myView logViewHierarchy];
票数 124
EN

Stack Overflow用户

发布于 2010-12-15 14:45:16

好的,这是我的解决方案,使用递归和UIView类的包装器(类别/扩展)。

代码语言:javascript
复制
// UIView+viewRecursion.h
@interface UIView (viewRecursion)
- (NSMutableArray*) allSubViews;
@end

// UIView+viewRecursion.m
@implementation UIView (viewRecursion)
- (NSMutableArray*)allSubViews
{
   NSMutableArray *arr=[[[NSMutableArray alloc] init] autorelease];
   [arr addObject:self];
   for (UIView *subview in self.subviews)
   {
     [arr addObjectsFromArray:(NSArray*)[subview allSubViews]];
   }
   return arr;
}
@end

用法:现在您应该遍历所有的子视图,并根据需要对其进行操作。

代码语言:javascript
复制
//disable all text fields
for(UIView *v in [self.view allSubViews])
{
     if([v isKindOfClass:[UITextField class]])
     {
         ((UITextField*)v).enabled=NO;
     }
}
票数 36
EN

Stack Overflow用户

发布于 2018-06-05 12:57:30

这是另一个Swift实现:

代码语言:javascript
复制
extension UIView {
    var allSubviews: [UIView] {
        return self.subviews.flatMap { [$0] + $0.allSubviews }
    }
}
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2746478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档