gpt4 book ai didi

ios - UILabel 文本未更新

转载 作者:IT王子 更新时间:2023-10-29 07:42:15 26 4
gpt4 key购买 nike

我无法更改 UILabel 文本。 viewDidLoad 中 UILabel 的代码是:

startLabel=[[UILabel alloc] initWithFrame:CGRectMake(75, 395, 200, 30)];
startLabel.text=@"Recording Sound ...";
startLabel.backgroundColor=[UIColor clearColor];
startLabel.textColor=[UIColor whiteColor];
startLabel.font=[UIFont boldSystemFontOfSize:17];

[self.view addSubview:startLabel];

稍后,如果我想使用以下代码更改文本的标签,它不会在应用程序上更改:

startLabel.text=@"Searching Database ...";

[startLabel setText:@"Searching Database ..."];

UILabel 不为空,我在调试时打印出来显示:

(gdb) po startLabel
<UILabel: 0x2c1a30; frame = (75 395; 200 30); text = 'Searching Database ...';
clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x2ae8f0>>

因此,标签的文本在 UILabel 中发生了变化,但它并没有在屏幕上更新。

谁能告诉我我在这里失踪了?谢谢。

编辑 1:我尝试了 performSelectorOnMainThread: - 对我不起作用。编辑 2:我正在使用 AVFoundationASIHTTP 类来录制声音并在此处上传录制的文件。没有其他的。没有使用任何线程。

最佳答案

您可能面临上面评论中提到的线程问题。如果您有一个在主线程上运行并执行某些事件(例如搜索数据库)的方法,则在运行循环获得控制权之前,您对 UI 所做的更新将不会提交。因此,如果您在主线程上执行一项耗时长的任务,请在设置标签文本后运行此代码:

- (void)doSomethingTimeConsuming
... consume some time ...
... set text of label ...
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]];
... continue long operation ...
}

这应该清除您所做的任何 UI 更改。虽然这可能是一个明智且实用的 hack,但它并没有击败其他选择。我强烈建议您在后台线程上执行应用程序的耗时任务,并使用 performSelectorOnMainThread:withObject:waitUntilDone: 通过主线程更新 UI。请参阅 Apple 页面 iOS Thread Management .

关于ios - UILabel 文本未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6835472/

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