iPhone动态添加UILabel重叠

时间:2011-08-23 11:47:57

标签: iphone objective-c

我正在通过URL解析XML文件并动态地将值显示为标签。

如果在xml文件中更改了值,则标签的新值将重叠在旧值

我该如何解决?

In viewDidLoad

for(int i=0;i<[appDelegate.books count]; i++){
[self createLabel:labelname labelFrame:CGRectMake(LXCOOR, LYCOOR,LWIDTH,LHEIGHT)];
}

-(void) createLabel :(NSString * ) aTitle labelFrame:(CGRect) aFrame{



    label1 =[[UILabel alloc] initWithFrame:aFrame];
    //label.font=[UIFont fontWithName:@"Helvetica" size:TEXTSIZE];
    label1.font=[UIFont systemFontOfSize: 10];
    label1.textAlignment = UITextAlignmentLeft;
    label1.text=[NSString stringWithString:aTitle];

    label1.textColor=[UIColor blackColor];
    label1.backgroundColor = [UIColor clearColor];

    [sv addSubview:label1];

    [self.view addSubview:sv];


}

3 个答案:

答案 0 :(得分:0)

在将sv添加到视图中之前删除它...

-(void) createLabel :(NSString * ) aTitle labelFrame:(CGRect) aFrame{


    if ([[sv subviews] count] > 0)
{
    for(int i=0 ; i< [[sv subviews] count] ; i++)
    {
        UIView *subView = [[sv subviews] objectAtIndex:0];
        [subView removeFromSuperview];
        i++;
    }
}
    [sv removeFromSuperView];
    label1 =[[UILabel alloc] initWithFrame:aFrame];
    //label.font=[UIFont fontWithName:@"Helvetica" size:TEXTSIZE];
    label1.font=[UIFont systemFontOfSize: 10];
    label1.textAlignment = UITextAlignmentLeft;
    label1.text=[NSString stringWithString:aTitle];

    label1.textColor=[UIColor blackColor];
    label1.backgroundColor = [UIColor clearColor];

    [sv addSubview:label1];

    [self.view addSubview:sv];


}

答案 1 :(得分:0)

在viewDidLoad中添加

[self.view addSubview:sv];

然后将“createLabel”功能修改为

-(void) createLabel :(NSString * ) aTitle labelFrame:(CGRect) aFrame{

for(UIView *tempView in [sv subviews]) {
   [subView removeFromSuperview];
}

    label1 =[[UILabel alloc] initWithFrame:aFrame];
    //label.font=[UIFont fontWithName:@"Helvetica" size:TEXTSIZE];
    label1.font=[UIFont systemFontOfSize: 10];
    label1.textAlignment = UITextAlignmentLeft;
    label1.text=[NSString stringWithString:aTitle];

    label1.textColor=[UIColor blackColor];
    label1.backgroundColor = [UIColor clearColor];

    [sv addSubview:label1];




}

答案 2 :(得分:0)

如上所述,您不应该反复重新创建标签。相反,你应该在viewDidLoad中创建一个实例(或者加载一次的东西)

-(void)viewDidLoad { ...
    //code
    CGRect aFrame = CGRectMake(x, y, width, height);
    label1 =[[UILabel alloc] initWithFrame:aFrame];
    [sv addSubview:label1];
    [self.view addSubview:sv];
}

接下来,您应该在您想要的位置调用createLabel,例如按钮单击或滚动手势。这应该是您的新createLabel而不添加子视图

-(void) createLabel :(NSString * ) aTitle labelFrame:(CGRect) aFrame{

    label1.font=[UIFont systemFontOfSize: 10];
    label1.textAlignment = UITextAlignmentLeft;
    label1.text=[NSString stringWithString:aTitle];

    label1.textColor=[UIColor blackColor];
    label1.backgroundColor = [UIColor clearColor];

}