Перебирать все подпредставления определенного типа - PullRequest
5 голосов
/ 25 января 2012

Итерации по всем 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 Ответ

11 голосов
/ 25 января 2012

Попробуйте так, должно быть достаточно безопасно.

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