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];