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

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

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

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


person xcodii    schedule 10.08.2012    source источник
comment
Для людей, которые ищут похожий вопрос; Используйте делегат панели вкладок -(BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController возвращает НЕТ, когда приложение занято.   -  person xcodii    schedule 10.08.2012


Ответы (2)


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

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];
person nab0y4enko    schedule 14.05.2014

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

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

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

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

person chinjazz    schedule 29.06.2013