gpt4 book ai didi

IOS/objective-C : Lazy load UILabel

转载 作者:行者123 更新时间:2023-12-01 18:40:07 26 4
gpt4 key购买 nike

我正在以编程方式创建标签。不幸的是,我发现每次更新标签时,我都会创建一个新实例。有没有办法在创建 UILabel 之前检查它是否已经存在?

这是我当前创建标签的代码:

UILabel *percentLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, height, 280, 20)];

如果我将其设置为以下条件,则会收到错误,即它无法识别标签:
for (id percentLabel in self.view.subviews) {
if (![percentLabel isKindOfClass:[UILabel class]]) {
UILabel *percentLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, height, 280, 20)];
}
percentLabel.textAlignment = NSTextAlignmentCenter;

感谢您的任何建议。

最佳答案

有很多方法可以检查对象是否存在。在您的示例中,if 语句将在 for 的每次迭代中创建一个标签。循环。该代码的固定版本如下所示:

UILabel *percentLabel = nil;
for (id subview in self.view.subviews) {
if ([subview isKindOfClass:[UILabel class]]) {
percentLabel = (UILabel *)subview;
break;
}
}
if (!percentLabel) {
// Label creation code here
}

但是我建议您将该标签作为属性存储在您的 View Controller 中并延迟初始化它,如下所示:
...
@property (weak, nonatomic) UILabel *percentLabel;
...

- (UILabel *)percentLabel {
if (!_percentLabel) {
UILabel *percentLabel = /* initialization code here */;
// Add percent label as a subview to your view
_percentLabel = percentLabel;
}

return _percentLabel;
}

请注意,我使用弱引用存储属性,因为您的 View 实际上将拥有该标签并通过它的 subviews 保持强引用属性(property)。

关于IOS/objective-C : Lazy load UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44663499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com