0

我试图在我的应用程序中显示 HUD 的混合,例如,当用户点击“登录”时,我希望我的 HUD 显示微调器说“登录...”,然后更改为复选标记图像说“登录!”,然后隐藏。我正在尝试使用以下代码来完成此操作:

MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
HUD.labelText = @"Logging in";
\\Do network stuff here, synchronously (because logging in should be synchronous)

\\ Then upon success do:
HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmark.png"]];
HUD.mode = MBProgressHUDModeCustomView;
HUD.labelText = @"Logged in!";
sleep(2);
[MBProgressHUD hideHUDForView:self.view animated:YES];

这里的问题是,sleep(2)它被应用于初始微调器,而不是复选标记 HUD。所以微调器显示的时间更长,而复选标记会在一瞬间消失。我该怎么做才能使复选标记在 HUD 隐藏之前在那里停留更长时间?

谢谢!

4

2 回答 2

1

作为最佳实践,不要使用睡眠。尝试使用“performSelector:withObject:afterDelay”方法。创建一个方法

[MBProgressHUD hideHUDForView:self.view animated:YES];

操作并在您选择的预定义延迟后调用它。不要忘记您正在处理 UI,因此请确保您在主线程上调用它。

于 2012-07-20T14:18:43.220 回答
0

我会创建两个HUD。第一个用于“等待”部分,第二个用于成功。在您的网络任务之前启动 loadingHUD,并在完成后将其隐藏:

MBProgressHUD *loadingHUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
loadingHUD.mode = MBProgressHUDModeIndeterminate;
loadingHUD.labelText = @"Please wait...";
loadingHUD.detailsLabelText = @"Connection in progress";
[loadingHUD show:YES];
// Do the network stuff here
[loadingHUD hide:YES];

之后,通知成功,根据需要创建成功HUD,并在延迟后隐藏它:

MBProgressHUD *successHUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
successHUD.mode = MBProgressHUDModeCustomView;
successHUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"checkmark.png"]];
successHUD.labelText = @"Logged in !";
[successHUD show:YES];
[successHUD hide:YES afterDelay:2.0];

您的成功 HUD 将显示 2 秒,然后自动隐藏。

这就是我一直使用 MBProgressHUD 的方式。

于 2012-07-20T15:20:54.980 回答