如何在UIView中获取所有UILabel

时间:2012-04-12 16:52:01

标签: ios objective-c uiview uilabel subviews

我需要一种方法来获取UILabel内的所有UIView,而无需浏览UIView中的所有观看次数。

我还有很多其他类型的观看次数,UIButton s,UIImageView s,如果我只需要UILabel s,那么浏览所有观点的时间太长了。

我试图避免这样的事情:

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

有可能还是我在做梦?

4 个答案:

答案 0 :(得分:6)

创建一个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;

并将所有标签连接到此。

答案 1 :(得分:4)

伙计,你需要使用递归。 (如果您不想使用标签)

试试这个。

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

答案 2 :(得分:2)

我喜欢@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;
}

答案 3 :(得分:1)

您可以为标签设置标签属性..类似这样......

label.tag = 100;

UILabel *lbl = [yourView viewWithTag:100];