Поиск всех UIButton в подпредставлениях

У меня сингл UIButton в виду мой UIViewController. У меня также есть еще десять, которые находятся в subview на главном экране. Я хочу найти все эти кнопки. Пока у меня есть:

-(void)findAllButtons{

    for(UIView *view in self.view.subviews) {
        if ([view isKindOfClass:[myButton class]]){
            NSLog(@"found a button!");         
        }
    }
}

Это только нахождение одной кнопки, а не других десяти. Это почему? Разве ему не следует перебирать все subview, а затем находить их?


person KexAri    schedule 09.11.2015    source источник
comment
Эти 10 кнопок не являются прямым подвидом к основному виду. Поэтому, если вы хотите их найти, измените self.view.subviews на свой выход subview (переменная свойства)   -  person Midhun MP    schedule 09.11.2015
comment
Чтобы найти все кнопки в полной иерархии, вы должны написать некоторую рекурсивную функцию   -  person Alok Rao    schedule 09.11.2015


Ответы (4)


Всего несколько строк кода

-(void)findAllButtons {
    [self findButtonsInSubviews:self.view.subviews];
}

- (void)findButtonsInSubviews:(NSArray *)subviews {
    for(UIView *view in subviews) {
        if ([view isKindOfClass:[UIButton class]]){
            NSLog(@"found a button!");
        } else {
            [self findButtonsInSubviews:view.subviews];
        }
    }
}
person arturdev    schedule 09.11.2015

Рекурсивная функция, использующая блоки Objective-C, подобные этому, найдет все представления данного типа подкласса, как указано в тестовом блоке в иерархии представлений данного представления:

NSMutableArray *marrAllButtons = [NSMutableArray new];

BOOL (^viewTest)(UIView*) = ^BOOL(UIView* viewToTest) {

    return [view isKindOfClass:[UIButton class]];
};

void(^viewEnumerator)(UIView*) = ^(UIView* outerView){

    for (UIView *view in outerView.subviews)
    {
        if (viewTest(view))
        {
            [marrAllButtons addObject:view];
        }
        else
        {
            viewEnumerator(view);
        }
    }
};

viewEnumerator(self.view);

NSLog(@"All Buttons %@", marrAllButtons);
person ZeMoon    schedule 09.11.2015

Ваш метод верен, если все ваши кнопки уже есть в self.view (основной вид).

Просто установите тег для кнопки все, чтобы проверить, а также убедитесь, что кнопка все находится на главном экране. Надеюсь, это сработает.

-(void)findAllButtons{

for(UIView *view in self.view.subviews) {
    if ([view isKindOfClass:[myButton class]]){
       UIButton *button = (UIButton*)view;
        NSLog(@"found a button with tag:%d",button.tag);         
    }
  }
}
person Jamil    schedule 09.11.2015

person    schedule
comment
temp_Colors_Name_comma это хранит ваше значение, которое вы хотите передать - person ; 30.08.2017