我看到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 回答
UILabel不打算有子视图 . 解决方案是让您的蓝色矩形成为标签超级视图的子视图 . 您可以将其放置在UILabel前面 .
因此,你有这个代码:
你会这样说: