IOS 5 MBProgressHUD отключает кнопки панели вкладок при загрузке данных. (userInteractionEnabled = NO)

Я использую MBProgressHUD при загрузке данных и пользователь может нажать кнопку другой вкладки во время процесса. MBProgressHUD отключить только просмотр содержимого. Я проверил другие сообщения, но не увидел ничего, что помогает мне отключить кнопку вкладки.

Я пытался установить tabbaritem.userInteractionEnabled в NO но я не мог найти способ получить к этому доступ. Я могу сделать это в раскадровке, но не могу переключиться обратно на YES,

Мой вопрос с моего viewController есть ли способ получить доступ tabbarcontroller.tabbaritem.userInteractionEnabled?

3 ответа

Я использую категорию:

UIViewController + MBProgressHUD.h

#import <UIKit/UIKit.h>

@class MBProgressHUD;

@interface UIViewController (MBProgressHUD)

- (MBProgressHUD *)showHUD;
- (MBProgressHUD *)showHUDFromTitle:(NSString *)title;
- (MBProgressHUD *)showHUDFromTitle:(NSString *)title completedImage:(BOOL)completedImage;
- (void)hideHUD;

@end

И UIViewController+MBProgressHUD.m

#import "UIViewController+MBProgressHUD.h"
#import <MBProgressHUD/MBProgressHUD.h>

@implementation UIViewController (MBProgressHUD)

- (MBProgressHUD *)showHUDFromTitle:(NSString *)title {
    UIView *view;
    if (self.tabBarController.view != nil) {
        view = self.tabBarController.view;
    } else if (self.navigationController.view != nil) {
        view = self.navigationController.view;
    } else {
        view = self.view;
    }
    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:NO];
    hud.labelText = title;
    return hud;
}

- (MBProgressHUD *)showHUD {
    return [self showHUDFromTitle:NSLocalizedString(@"Loading", @"Loading")];
}

- (MBProgressHUD *)showHUDFromTitle:(NSString *)title completedImage:(BOOL)completedImage {
    MBProgressHUD *hud = [self showHUDFromTitle:title];
    if (completedImage) {
        UIImage *checkmarkImage = [UIImage imageNamed:@"37x-Checkmark"];
        UIImageView *checkmarkImageView = [[UIImageView alloc] initWithImage:checkmarkImage];
        hud.customView = checkmarkImageView;
        hud.mode = MBProgressHUDModeCustomView;
    } else {
        hud.mode = MBProgressHUDModeText;
    }
    return hud;
}

- (void)hideHUD {
    [MBProgressHUD hideAllHUDsForView:self.tabBarController.view animated:NO];
    [MBProgressHUD hideAllHUDsForView:self.navigationController.view animated:NO];
    [MBProgressHUD hideAllHUDsForView:self.view animated:NO];
}

Пример:

[self showHUD];
[self hideHUD];

Это простой способ

 [[[self tabBarController] tabBar] setUserInteractionEnabled:NO];

Как указано в этой ссылке: Как сделать действие панели вкладок скрытым при загрузке представления?

Отлично работает с MBProgressHUD

Еще изящнее показать HUD отUITabBarController, так как взаимодействие с пользователем будет полностью контролироватьсяMBProgressHUDдоhideAnimated:называется:

      // Show HUD from Tab Bar, to disable the tab bar items:
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.tabBarController.view
                                          animated:YES];

// Do some time-consuming stuff:
...

// Hide HUD and enable tab bar items:
[hud hideAnimated:YES];

Другие вопросы по тегам