我不想显示进度指示器(MBprogress hud),这是我实现的代码。
[NSThread detachNewThreadSelector: @selector(showMe) toTarget:self withObject:NULL];
在show方法中,我已经(试图)显示了MBprogress Hud,但它没有显示标签文字。
-(void)showMe
{
if(hudForBal) // hudForBal is my MBprogressHud's object
{
[hudForBal removeFromSuperview];
[hudForBal release];
hudForBal = nil;
}
hudForBal =[[MBProgressHUD alloc]init];
hudForBal.labelText =@"Please wait...";
hudForBal.delegate = Nil;
[self.view addSubview:hudForBal];
[hudForBal show:YES];
}
它正在工作,但它没有显示标签文字。我做错了什么? 提前谢谢!
答案 0 :(得分:1)
没有必要创建一个新线程来实现这一点,事实上,在主线程以外的任何线程上更改UI都是未定义的行为。如果您在调用此方法时已经在主线程上,那么您所要做的就是像往常一样执行选择器,而不将其发送到其他线程。
但是,如果您在执行此选择器时已经在后台线程上,并且想要更新UI,则可以使用dispatch_async()
作为快速简便的方法返回主要线。
- (void)showMe {
dispatch_async(dispatch_get_main_queue(), ^{
if(hudForBal) {
[hudForBal removeFromSuperview];
[hudForBal release];
hudForBal = nil;
}
hudForBal =[[MBProgressHUD alloc]init];
hudForBal.labelText =@"Please wait...";
hudForBal.delegate = Nil;
[self.view addSubview:hudForBal];
[hudForBal show:YES];
});
}