2012-08-27 43 views
2

在我的應用程序中,我有UINavigationController裏面UITabBar 當我顯示我的平視顯示器時,整個屏幕被鎖定,除了TabBar。所以解除我的HUD的唯一方法就是點擊一個標籤。 我也想關閉它,當我在「後退」按鈕點擊我的NavigationController 這裏是我的代碼:iphone - MBProgressHUD防止鎖定導航控制器

hud = [[MBProgressHUD alloc] initWithView:self.navigationController.view]; 
[self.navigationController.view addSubview:hud]; 
hud.delegate = self; 
hud.labelText = @"Loading..."; 
[hud show:YES]; 

回答

4

您要添加的HUD視圖導航控制器 - 這就是爲什麼你不能與互動導航欄。

你想達到的目的是鎖住self.navigationController.topViewController.view,我想你的情況可以通過self.view進入。

嘗試以下操作:

hud = [[MBProgressHUD alloc] initWithView:self.view]; 
[self.view addSubview:hud]; 

讓我們知道,如果以上對你的工作。如果沒有,我會改進答案來尋找解決方案。

+0

是的,你說得對!它解決了我的問題:-) – Oleg

+0

實現你的答案後,HUD顯示在不同的位置,這取決於我是否滾動了我的tableView。我該如何解決這個問題? – Oleg

1

Hud將使userIntrection禁用...因此用戶無法觸及添加hud的區域...所以只需添加hud即可添加它...但要確保沒有任何UI當HUD正在運行的變化,因爲HUD上輔助線程運行,並在輔助線程的變化讓你的應用程序崩潰....

HUD = [[MBProgressHUD alloc] initWithView:self.view]; 
    HUD.graceTime = .1; 
    HUD.labelFont = [UIFont fontWithName:@"Arial" size:16]; 
    HUD.labelText = @"Loading.."; 
    HUD.delegate = self; 
    [self.view addSubview:HUD]; 
    [HUD showWhileExecuting:@selector(loginJsonParsing) onTarget:self withObject:nil animated:YES]; 
0

我曾經有過這個bug時,從後退按鈕,用戶點擊導航欄,而HUD仍然在後臺工作BOOM應用程序粉碎,我設法解決這個與短代碼接受的答案。這取決於你想要HUD的習慣。我使用默認的一個。

顯示:

[MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES]; 

隱藏:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; 
    }); 
});