Как получить определенное подпредставление от UIView по тегу

Я новичок в Objective-C, и у меня есть один вопрос.

у меня есть такой UILabel объект, который я добавил к одному UIView с этим кодом:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,10,self.view.frame.size.width-15-70, 30)];
label.tag = 1;
label.font = [PublicObject fontTexts:17];
label.textAlignment = NSTextAlignmentRight;
label.textColor = [UIColor whiteColor];
[cell setBackgroundColor:[UIColor clearColor]];

 UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
 view.backgroundColor = [PublicObject colorWithHexString:@"cd4110"];
 label.text = [filterData objectAtIndex:indexPath.row];
 view addSubview:label];

Теперь я хочу получить одно подпредставление в моем представлении, где это подпредставление имеет тег = 1, и сохранить его в другом объекте, например так:

UILabel *tagLabel;
tagLabel = // I want get one subview in view where tag = 1 

Пожалуйста, помогите мне понять, как это сделать.

6 ответов

Решение

Вы можете получить ваши подпредставления с итерацией цикла

for (UIView *i in self.view.subviews){
      if([i isKindOfClass:[UILabel class]]){
            UILabel *newLbl = (UILabel *)i;
            if(newLbl.tag == 1){
                /// Write your code
            }
      }
}

Пример с UILabel:

UILabel *label = (UILabel *)[self.view viewWithTag:1];

удачи!

Вы можете получить подпредставление с кодом, который упоминали другие, так же, как

UILabel *tagLabel = (UILabel*)[view viewWithTag:1];

Но важно помнить,

  • Убедитесь, что родительское представление не имеет того же значения тега, что и подпредставление. В противном случае viewWithTag: метод вернет представление получателя (по которому вы звоните viewWithTag:вместо того, чтобы возвращать фактическое подпредставление, которое вы хотите

Поэтому держите теги родительского и дочернего представлений, когда вам нужно использовать viewWithTag:,

Swift 3.0 и Swift 4.0

if let subLabel:UILabel = primaryView.viewWithTag(123) as? UILabel {
    subLabel.text = "do things here :-D"
}

Вы можете использовать viewWithTag: метод.

Если вы находитесь на той же точке зрения

UILabel *tagLabel =  (UILabel*)[view viewWithTag:1];

Кроме того, если вы хотите новый экземпляр UILabel

UILabel *newTagLabel = [tagLabel copy];
//customize new label here...
[view addSubView:newTagLabel];
Другие вопросы по тегам