我需要一种方法来获取UILabel
内的所有UIView
,而无需浏览UIView
中的所有观看次数。
我还有很多其他类型的观看次数,UIButton
s,UIImageView
s,如果我只需要UILabel
s,那么浏览所有观点的时间太长了。
我试图避免这样的事情:
for (UIView *view in myView.subviews)
{
if([view isKindOfClass:[UILabel class]])
{
UILabel *lbl = (UILabel*)view;
}
}
有可能还是我在做梦?
答案 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];