我从 http://github.com/matej/MBProgressHUD 下载了一些代码在做某事时显示进度表。
这是使进度表弹出的代码。
[HUD showWhileExecuting:@selector(myTask) onTarget:self withObject:nil animated:YES];
这将在 myTask 方法运行时显示进度表。
奇怪的是,当 myTask 运行时,它还允许程序在此行以下继续执行。这不是我想要的行为。我希望在 myTask 运行时显示进度表,并且只有在 myTask 完成运行后,我才希望程序执行在此行以下继续。
这是 showWhileExecuting 方法的代码。
- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated {
methodForExecution = method;
targetForExecution = [target retain];
objectForExecution = [object retain];
// Launch execution in new thread
taskInProgress = YES;
[NSThread detachNewThreadSelector:@selector(launchExecution) toTarget:self withObject:nil];
// Show HUD view
[self show:animated];
}
为了获得我想要的行为,我应该编辑这段代码,还是做其他事情?
我试图通过在调用此方法之前设置一个 bool 值来解决这个问题,这会导致程序执行立即卡在 while 循环中,直到在 myTask 结束时更改 bool 值。这是可行的,但由于某种原因,它会导致仪表在最后只显示一瞬间,而不是像预期的那样始终显示。这是为什么?
最佳答案
您正在调用的方法是在新线程上运行您的任务。
您的 while 循环方法不起作用,因为 UI 显示更新是在主线程上完成的。当你在 while 循环中时,你阻塞了主线程。
我建议您将任务完成后要运行的代码移至新方法。然后,在您的任务结束时,调用此方法。 (或者,让它发送通知或其他信号。)
另外,查看有关线程和运行循环的文档,了解这个主题很重要。
关于objective-c - 应该如何更改此代码才能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3879249/