首页 文章

当文本更改为Unicode字符串时,UILabel的子视图会消失

提问于
浏览
-1

我看到UILabel的一个奇怪的行为及其在iOS开发上的子视图 . 我想在UILabel上有一个叠加视图,并且只想更改标签的文本 .

当文本是数字或字母时,它很有效 . 但是,当我将文本更改为Unicode字符串时,子视图消失 .

为了重现这个问题,我创建了一个只有标签和按钮的简单项目 .

标签的初始文本为“A” . 点击按钮时,将调用以下方法并循环更改UILabel的文本 .

- (void)pushButton:(id)sender
{
    if ([[_label text] isEqualToString:@"A"]) {
        [_label setText:@"B"];

        // add a subview on the label
        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
        [view setBackgroundColor:[UIColor blueColor]];
        [_label addSubview:view];

    } else if ([[_label text] isEqualToString:@"B"]) {
        [_label setText:@"C"];
    } else if ([[_label text] isEqualToString:@"C"]) {
        [_label setText:@"D"];
    } else if ([[_label text] isEqualToString:@"D"]) {
        [_label setText:@"\u2605"];
        // after this, the subview disappears
    } else {
        [_label setText:@"A"];
        // after this, the subview appears again
    }
}

当我第一次点击按钮时,文本将更改为“B”并显示子视图 .

第二次和第三次,文本更改为“C”和“D”,子视图仍然存在 .

Howerver第四次,文本更改为“★”,子视图消失 .

第五次,文本更改为“A”,子视图再次出现 .

在此代码中,我不删除子视图,并在每个周期中创建新的子视图 . 但是在任何时候文本都改为“★”,所有这些子视图都消失了 .

如何让子视图出现在UILabel上?

1 回答

  • 2

    UILabel不打算有子视图 . 解决方案是让您的蓝色矩形成为标签超级视图的子视图 . 您可以将其放置在UILabel前面 .

    因此,你有这个代码:

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
    [view setBackgroundColor:[UIColor blueColor]];
    [_label addSubview:view];
    

    你会这样说:

    UIView *sup = [_label superview];
    UIView *view = [UIView new];
    [view setBackgroundColor:[UIColor blueColor]];
    CGRect r = CGRectMake(0,0,20,20);
    r = [sup convertRect:r fromView:_label];
    view.frame = r;
    [sup addSubview: view];
    

相关问题