Ahs*_*san 36 uilabel asihttprequest ios
我无法更改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];
Run Code Online (Sandbox Code Playgroud)
稍后,如果我想使用以下代码更改文本的标签,则不会更改应用程序:
startLabel.text=@"Searching Database ...";
Run Code Online (Sandbox Code Playgroud)
要么
[startLabel setText:@"Searching Database ..."];
Run Code Online (Sandbox Code Playgroud)
UILabel不是空的,我在调试过程中打印出来,它显示:
(gdb) po startLabel
<UILabel: 0x2c1a30; frame = (75 395; 200 30); text = 'Searching Database ...';
clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x2ae8f0>>
Run Code Online (Sandbox Code Playgroud)
因此,标签的文本在UILabel内部发生变化,但未在屏幕上更新.
有谁可以让我知道我在这里失踪了什么?谢谢.
编辑1:我试过performSelectorOnMainThread:
- 没有为我工作.编辑2:我正在使用AVFoundation
和ASIHTTP
类来录制声音并在此处上传录制的文件.没有其他的.没有使用任何线程.
ndo*_*doc 49
在我的情况下,正在更新的函数是从一个线程上的触摸识别器调用的,但是函数中我正在改变标签的text属性值的位置我把它放回到主线程上:
dispatch_async(dispatch_get_main_queue(), ^{
[self.someLabel setText:someString];
});
Run Code Online (Sandbox Code Playgroud)
Ale*_*hol 47
您可能面临上述评论中提到的线程问题.如果您有一个在主线程上运行并执行某些活动的方法(例如搜索数据库),则在运行循环获得控制权之前,不会提交您对UI所做的更新.所以,如果你有一个长期的,耗时的任务正在进行的主线程上,设置标签的文本后,运行此代码:
- (void)doSomethingTimeConsuming
... consume some time ...
... set text of label ...
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]];
... continue long operation ...
}
Run Code Online (Sandbox Code Playgroud)
这应该清除您所做的任何UI更改.虽然这可能是一个明智和功能性的黑客,但它并没有超越替代方案.我强烈建议您在后台线程上执行应用程序的耗时任务,并使用主线程更新UI performSelectorOnMainThread:withObject:waitUntilDone:
.请参阅iOS线程管理上的Apple页面.
我有一个 UILabel 显示的级别号不会更新为 UIViewController 上的新级别号。我能找到的唯一可行的解决方案是在拥有 UILabel 的视图控制器的主线程上调用 setNeedsDisplay
-(void)changeLevelLabel:(int)theLevel {
dispatch_async(dispatch_get_main_queue(), ^{
self.levelLabel.text = [NSString stringWithFormat:@"%d",theLevel];
[self.levelLabel setNeedsDisplay];
});
Run Code Online (Sandbox Code Playgroud)
}
有关更详细的说明,请参阅http://iosdevelopmentjournal.com/blog/2013/01/16/forcing-things-to-run-on-the-main-thread/
归档时间: |
|
查看次数: |
31836 次 |
最近记录: |