迭代特定类型的所有子视图

时间:2012-01-25 09:26:35

标签: objective-c ios uiview objective-c-blocks

迭代一个类的子视图中的所有UIViews然后使用isKindOfClass检查循环中的类型使我的代码看起来多余。所以我编写了以下方法,为每个子视图执行一个块。

@implementation Util

+ (void)iterateOverSubviewsOfType:(Class)viewType 
                   view:(UIView*)view
                   blockToExecute:(void (^)(id subview))block
{
    for (UIView* subview in view.subviews) {
        if ([subview isKindOfClass:viewType]) {
            block(subview);
        }
    }
}

@end

传递给此方法的块采用类型为id的参数。这里使用的类型当然应该与第一个参数一样。但到目前为止,我还没有找到一种方法来使这种类型更安全。

1 个答案:

答案 0 :(得分:11)

这样试试,应该足够安全。

for (id subview in view.subviews) {
        if ([subview isMemberOfClass:viewType]) {
            block(subview);
        }
    }