我正在制作一个带有tableview的应用程序。我想实现一个加载屏幕,使用MBProgressHUD,它将在从互联网读取数据之前显示。但是,使用以下代码未显示数据:
- (void)viewDidLoad
{
HUD = [[MBProgressHUDalloc] initWithView:self.view];
[self.viewaddSubview:HUD];
HUD.delegate = self;
[HUD showWhileExecuting:@selector(load_data) onTarget:self withObject:nil animated:YES];
}
数据可以单独使用load_data函数在tableview中显示(即[self load_data],但不能使用HUD。
答案 0 :(得分:0)
根据我的经验,当在加载或等待加载数据时使用HUD进行显示时,您应该使用-viewDidAppear
方法调用HUD。我还注意到你没有包含[super viewDidLoad];打电话给你的代码。如果您要展示您的HUD,您必须在调用超级viewDidLoad后调用它,如果您想要它出现。希望这些可以帮到你。
答案 1 :(得分:0)
我喜欢用不同的方法来呈现和隐藏HUD。 e.g。
#pragma mark - The HUD
-(void)showHudWithText:(NSString *)text {
if (self.hud == nil) {
self.hud = [[[MBProgressHUD alloc] initWithWindow:self.window] autorelease];
[self.window addSubview:hud];
}
[self.hud setLabelText:text];
[self.hud setMode:MBProgressHUDModeIndeterminate];
[self.hud show:YES];
}
-(void)hideHud {
[self.hud hide:YES];
}
这允许独立于视图生命周期以及异步方法,定时器等控制HUD,例如:
-(void)viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showHudWithText:) name:kSomethingImportantStartedNotification object:@"Starting..."];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideHud) name:kSomethingImportantEndedNotification object:nil];
}
或类似的东西。