Визуально это то, что я хочу
У меня есть UITabBarController .Я хочу скрыть UITabBar , когда пользователь входит в среднюю вкладку.Средняя вкладка загружает контроллер представления класса B. Это поведение популярного приложения камеры Instagram .Их средняя вкладка загружает полноэкранную камеру.
------------- ------------- -------------
| VC | | VC | | VC |
| for | | for | | for |
| A | | B | | C |
| | | | | |
|------------ | | |------------
{ A } B | C | | | | A | B { C }
------------- ------------- -------------
Предлагаемое решение по всем другим связанным вопросам StackExchange
У нас уже есть десятки вопросов о том, как скрыть UITabBar при нажатии определенного контроллера представления.Общее мнение таково:
b.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:b
animated:YES];
Моя проблема в том, что я никогда не разделял UITabBarController на подклассы.Я создал это в Интерфейсном Разработчике.Я никогда не нажимаю вручную на свои контроллеры вида, поэтому приведенное выше решение не работает для меня.
Попытка сбоя 1
Внутри моего контроллера среднего вида я включаю hidesBottomBarWhenPushed
в конструкторе.Это не имело никакого эффекта.
@implementation B
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.hidesBottomBarWhenPushed = YES;
}
return self;
}
Попытка сбоя 2
Я также попытался назначить моего делегата приложения как UITabBarControllerDelegate .Когда UITabBarController уведомляет меня, что вкладка нажата, я включаю hidesBottomBarWhenPushed
только для контроллера среднего вида.Также не удалось скрыть UITabBar
.
#pragma mark UIApplicationDelegate
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
[window addSubview:self.rootViewController.view];
[window makeKeyAndVisible];
self.rootViewController.delegate = self;
}
#pragma mark UITabBarControllerDelegate
- (void) tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
{
if ([viewController isKindOfClass:[B class]]) {
viewController.hidesBottomBarWhenPushed = YES;
} else {
viewController.hidesBottomBarWhenPushed = NO;
}
}