【问题标题】:Can't remove a label programmatically无法以编程方式删除标签
【发布时间】:2013-12-05 12:27:54
【问题描述】:

我正在以编程方式打印标签,但无法将其从屏幕上移除。我试过removeFromSuperviewlbl1.hidden = YES;lbl1= nil; 但它们都不起作用。它一直停留在屏幕上,而我可以在调试中看到它从ELSE 传递,如下面的代码所示。

我的问题在哪里?

-(void)reloadData
lbl1 = [[UILabel alloc] initWithFrame:CGRectMake(320, 530, 550, 200)];

if (result1 > result2 &&  al == YES)
{
    lbl1.userInteractionEnabled = YES;
    lbl1.text = @" Warning!! ";
    lbl1.tag = 30;
    lbl1.font = [UIFont fontWithName:@"Helvetica" size:18.0];
    lbl1.textColor = [UIColor redColor];
    lbl1.backgroundColor = [UIColor clearColor];
    lbl1.lineBreakMode = NSLineBreakByWordWrapping;
    lbl1.numberOfLines = 2;
    [self addSubview:lbl1];
    [lbl1 release];
}

else{

    //Non of them is removing the label.
    [lbl1 removeFromSuperview];
    lbl1= nil;
    lbl1.hidden = YES;
}

【问题讨论】:

  • 在这种情况下,我认为您的方法调用多次请调试您的代码
  • 为什么你在第一个if之前初始化标签因为你没有将它添加到视图(addSubview),它不在屏幕上。但是,我认为,那是因为你总是做一个 alloc/init ......所以,如果它不存在,那就做 alloc/init。
  • @Luai Kalkatawi - 我的回答是否适合你。

标签: ios label cgrectmake


【解决方案1】:

每次你进入 reloadData 时,你都在创建一个新标签,所以如果你进入 reload 并跳转到 else,你就是在创建一个标签,然后删除它。

您需要将该标签保存为实例变量并将其删除/添加到您的 reloadData。

@property(nonatomic, strong) UILabel *lbl1;

在您的代码中,只执行一次:

self.lbl1 = [[[UILabel alloc] initWithFrame:CGRectMake(320, 530, 550, 200)] autorelease];

在你的 reloadData 中做:

-(void)reloadData
lbl1 = [[UILabel alloc] initWithFrame:CGRectMake(320, 530, 550, 200)];

if (result1 > result2 &&  al == YES)
{
    self.lbl1.userInteractionEnabled = YES;
    //Etc...
}

else{

    [self.lbl1 removeFromSuperview];
}

【讨论】:

  • 嗨安东尼奥,我已经做了你写的同样的方法,但它没有工作。我应该测试其他东西吗?
  • 您好 Antonio,此代码有效,它显示并清理标签,但是当标签为空并尝试清理它时,我得到 EXC_BAD_ACCESS
【解决方案2】:

试试这样:

-(void)reloadData
if(!lbl1)
lbl1 = [[UILabel alloc] initWithFrame:CGRectMake(320, 530, 550, 200)];

if (result1 > result2 &&  al == YES)
{
    lbl1.userInteractionEnabled = YES;
    lbl1.text = @" Warning!! ";
    lbl1.tag = 30;
    lbl1.font = [UIFont fontWithName:@"Helvetica" size:18.0];
    lbl1.textColor = [UIColor redColor];
    lbl1.backgroundColor = [UIColor clearColor];
    lbl1.lineBreakMode = NSLineBreakByWordWrapping;
    lbl1.numberOfLines = 2;
    [self addSubview:lbl1];
    [lbl1 release];
}

else{

    //Non of them is removing the label.
    [lbl1 removeFromSuperview];
    lbl1= nil;
    lbl1.hidden = YES;
}

【讨论】:

  • 标签已移除...使用此 [self.view viewWithTag:30];
【解决方案3】:

尝试像这样删除....

if (result1 > result2 &&  al == YES)
{
    lbl1.userInteractionEnabled = YES;
    lbl1.text = @" Warning!! ";
    lbl1.tag = 30;
    lbl1.font = [UIFont fontWithName:@"Helvetica" size:18.0];
    lbl1.textColor = [UIColor redColor];
    lbl1.backgroundColor = [UIColor clearColor];
    lbl1.lineBreakMode = NSLineBreakByWordWrapping;
    lbl1.numberOfLines = 2;
    [self addSubview:lbl1];
    [lbl1 release];
}

else{

    //Non of them is removing the label.
    [[self.view viewWithTag:30] removeFromSuperview];
    lbl1= nil;
    lbl1.hidden = YES;
}

【讨论】:

  • (UILabel *) 转换不需要标签直接删除 [self.view viewWithTag:30];它工作正常...
  • 我在这个文件中没有视图。我怎么能称之为视图。 @prabu
  • 试试这个 [[self viewWithTag:30]removeFromSuperview]; @Luai
  • @prabu 没用。如果视图为空,我会得到 EXC_BAD_ACCESS。如何在方法为空时应用方法不检查?
  • @LuaiKalkatawi... 你添加标签如 [self addSubview:lbl1];如果视图为空如何添加标签?
猜你喜欢
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-10
相关资源
最近更新 更多