시각적으로 이것은 내가 원하는 것입니다.
나는 UITabBarController입니다. 사용자가 가운데 탭을 입력하면 UITabBar을 숨기려고합니다. 가운데 탭은 B 클래스의 뷰 컨트롤러를로드합니다. 이것은 인기있는 카메라 앱인 Instagram의 동작입니다. 중간 탭은 전체 화면 카메라를로드합니다. 우리는 이미 특정 뷰 컨트롤러가 밀어 때의 UITabBar을 숨기는 방법에 대한 질문 수십있는 모든 다른 관련 StackExchange 질문 하위 클래스를 만들지 않은 UITabBarController에서 UITabBar를 숨기는 방법은 무엇입니까?
에서
------------- ------------- -------------
| VC | | VC | | VC |
| for | | for | | for |
| A | | B | | C |
| | | | | |
|------------ | | |------------
{ A } B | C | | | | A | B { C }
------------- ------------- -------------
제안 된 솔루션을 제공합니다. 일반적인 합의는 다음과 같습니다.
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;
}
}
그러나 당신은 그것을 서브 클래스 화해, IB는 클래스의 인스턴스를 반환 할 수 있습니다. – Krumelur