如何通过标签从UIView获取某个子视图

时间:2014-07-02 11:53:39

标签: objective-c uiview uilabel

我是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];

现在我希望在我的视图中获得一个子视图,其中此子视图的 tag = 1 并将其保存在另一个对象上,如下所示:

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

请帮助我了解如何执行此操作。

6 个答案:

答案 0 :(得分:75)

UILabel的示例:

UILabel *label = (UILabel *)[self.view viewWithTag:1];
祝你好运!

答案 1 :(得分:31)

您可以使用for循环迭代获取子视图

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

答案 2 :(得分:28)

您可以使用其他人提到的代码获取子视图,就像

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

但重要的是要记住,

  • 确保父视图与子视图的标记值不同。否则,viewWithTag:方法将返回接收方视图(您正在调用viewWithTag:),而不是返回所需的实际子视图。

因此,只要您需要使用viewWithTag:,就可以保持父视图和子视图标记的不同。

答案 3 :(得分:6)

Swift 3.0和Swift 4.0

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

答案 4 :(得分:5)

您可以使用viewWithTag:方法。

答案 5 :(得分:4)

如果你在同一个观点

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

另外,如果你想要一个新的UILabel实例

UILabel *newTagLabel = [tagLabel copy];
//customize new label here...
[view addSubView:newTagLabel];