как получить все UILabels в UIView

Мне нужен способ получить все UILabel в UIView без необходимости просматривать все представления в UIView .

У меня есть много других видов взглядов, UIButton s, UIImageView и было бы слишком долго проходить через все их, когда мне просто нужно UILabel .

Я пытаюсь избежать чего-то вроде этого:

 for (UIView *view in myView.subviews) { if([view isKindOfClass:[UILabel class]]) { UILabel *lbl = (UILabel*)view; } } 

Возможно ли, или мне снится?

Создайте NSArray ivar, к которому вы можете добавить все UILabel .

Если вы сделаете это в коде, тогда, когда вы создаете UILabel просто сделайте

 NSMutableArray *labels = [[NSMutableArray alloc] init]; // Repeat this for al labels UILabel *label = [[UILabel alloc] in... [labels addObject:label]; // Then self.labels = [labels copy]; 

Если вы используете IB, объявите свою собственность как это

 @property (nonatomic, strong) IBOutletCollection(UILabel) NSArray *labels; 

и соедините все метки до этого.

Человек, вам нужно использовать рекурсию. (Если вы не хотите использовать теги использования)

Попробуй это.

 -(UIView *)checkChild:(UIView *)view{ NSArray *arrayView = view.subviews; UIView *returnView = nil; for (UIView *auxView in arrayView) { if ([auxView isKindOfClass:[UILabel class]]) { return auxView; }else{ returnView = [self checkChild:auxView]; } } return returnView; } 

Вы можете установить свойство тега для метки .. что-то вроде этого …

 label.tag = 100; UILabel *lbl = [yourView viewWithTag:100]; 

Мне понравился подход @SiddharthaMoraes, но он изменил его, чтобы собрать все элементы, найденные на его пути. Я искал UILabels внутри моего UIViewController и не мог найти их, потому что они были вложены внутри другого UIView , поэтому эта рекурсия должна решить проблему:

 -(NSMutableArray *)checkChild:(UIView *)view{ NSArray *arrayView = view.subviews; NSMutableArray *arrayToReturn = [NSMutableArray new]; for (UIView *auxView in arrayView) { if ([auxView isKindOfClass:[MyLabel class]]) { [arrayToReturn addObject:auxView]; }else if( auxView.subviews ){ [arrayToReturn addObjectsFromArray:[self checkChild:auxView]]; } } return arrayToReturn; } 
Interesting Posts
Давайте будем гением компьютера.