仅在操作完成时才显示MBProgressHUD

时间:2013-10-21 18:31:44

标签: ios xcode mbprogresshud

我正在使用MBProgressHUD来显示带有加载动画的弹出窗口,但我遇到了问题。按下按钮时执行进度指示器调用。这是行动

- (IBAction)calendarioButtonPressed:(UIButton *)sender {

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeIndeterminate;
hud.labelText = @"Uploading";
[hud show:YES];
[self getCalendarioJson];
}

在getCalendarioJson中我有这个

- (void) getCalendarioJson {

//LETTURA CALENDARIO - INIZIO
NSString *calLink = myLink;

NSData* responseData = [NSData dataWithContentsOfURL:[NSURL URLWithString:calLink]];


NSArray* json = [NSJSONSerialization
                 JSONObjectWithData:responseData //1
                 options:kNilOptions error:nil];
NSDictionary *firstObject = [json objectAtIndex:0];

NSDictionary *cal = [firstObject objectForKey:@"output"];
variabiliGlobali.calendario = [[NSMutableArray alloc] init];
for (NSDictionary *dict in cal) {
    [variabiliGlobali.calendario addObject: dict];
}

//LETTURA CALENDARIO - FINE

}

为什么加载弹出窗口只出现在getCalendarioJson执行结束时? 按钮有一个segue。当我从目标视图返回时,我可以看到弹出窗口。

什么是metter?如果我删除了segue,我可以在getCalendarioJson执行结束时看到弹出窗口(因为没有segue)。

提前致谢。

2 个答案:

答案 0 :(得分:0)

你有一个方法[self getCalendarioJson];但是这个方法在主线程中运行,主线程用于UI更新,当你下载数据或进行几秒持续时间的操作时,主线程等待make UI更新。

要解决这种情况,请将方法放在后台线程中,可以使用[self performSelectorInBackground:@selector(getCalendarioJson) withObject:nil];

答案 1 :(得分:0)

来自https://github.com/jdg/MBProgressHUD

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.mode = MBProgressHUDModeAnnularDeterminate;
hud.labelText = @"Loading";
[self doSomethingInBackgroundWithProgressCallback:^(float progress) {
    hud.progress = progress; //Here you set the progress
} completionCallback:^{
    [hud hide:YES];
}];

您应该设置进度值。