cómo get todos los UILabels dentro de una UIView

Necesito una manera de get todos los UILabel s dentro de una UIView sin tener que pasar por todas las vistas dentro de UIView .

Tengo muchos otros types de vistas, UIButton s, UIImageView s y sería demasiado largo para ir a través de todos ellos cuando necesito los UILabel s.

Estoy tratando de evitar algo como esto:

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

¿Es posible o estoy soñando?

Cree un ivar NSArray al que pueda agregar todos los UILabel .

Si lo haces en el código, entonces, a medida que crees, la UILabel solo haz

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

Si usa IB, declare su propiedad como esta

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

y conecte todas las tags hasta esto.

Hombre, necesitas hacer uso de la recursion. (Si no desea usar tags)

Prueba esto.

 -(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; } 

Puede establecer la propiedad de label para la label … algo así …

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

Me gustó el enfoque de @SiddharthaMoraes, pero lo cambié para recostackr todos los elementos encontrados en su ruta. Estaba buscando los UILabels dentro de mi UIViewController y no los podía encontrar porque anidaban dentro de otra UIView , por lo que esta recursión debería resolver el problema:

 -(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; }