2011-12-16 4 views
3

많은 사람들이 전에 경험했던 문제에 빠져들지 만, 새로운 IOS 릴리스가 출시되면서 시간이 갈수록 해결책이 달라진다. API가 변경됩니다. 이전 솔루션은 현재 설치를 위해 작동하지 않습니다. XCode 4.2.1, iPhone 시뮬레이터 5.0 또는 실제 iPhone 5.0, ARC 및 스토리 보드를 사용하는 iOS5를 대상으로하는 앱입니다.TabBar가 숨어있어 내가 묻는대로 다시 돌아오고 싶지 않다.

기존의 탭이있는 app -ie UITabBarController가 있습니다. 4 탭 ... 2 ~ 4 번째 탭을 무시합니다 .. 첫 번째 탭은 UITableViewController 인 rootviewcontroller를 사용하여 UINavigationController를 호스팅합니다. 이제 1 CustomUIViewController 스택에 밀어 넣으십시오.

전체 설정은 스토리 보드에서 시각적으로 디자인되며, 푸시는 세그 (segue)로 수행됩니다.

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    self.hidesBottomBarWhenPushed = YES; 
} 

이 기능은 iPhone에서 iPod 앱과 동일한 방식으로 탭바를 효과적으로 숨 깁니다.

하지만 스택에서 CustomUIViewController를 팝하면 TabBar가 다시 나타나지 않습니다. 나는 모든 가능하고 불가능한 장소에

self.hidesBottomBarWhenPushed = NO; 

을 가하고,하지만 운되었다.

어떻게하면 내 TabBar를 다시 가져올 수 있습니까?

답변

4

나는 당신이보기 컨트롤러가 스택에서 팝까지

+0

스토리 보드의보기 컨트롤러 속성에서이 확인란을 선택하지 않았습니까? –

+0

실제로 그럴 경우 – agilityvision

+0

나는 심지어 그것을 컴파일 할 수 없다. it says - "hidesBottomBarWhenPushed"속성이 "id"유형의 객체에서 발견되지 않는다. –

3

Apple에 따르면, "하단 바 숨겨진 남아

대신 self.hides의
segue.destinationViewController.hidesBottomBarWhenPushed = YES; 

.... 설정할 필요가 있다고 생각합니다. " 네비게이션 계층에서 더 높은 뷰 컨트롤러로 팝업하지 않으면 아래쪽 막대를 숨김 해제 할 수 없습니다.

hidesBottomBarWhenPushed 속성을 포함하지 않는 다른 해결 방법을 찾아야합니다. another SO question에서이를 수행하는 방법에 대한 좋은 설명이 있습니다.

+1

내가 거의 잃어버린 후에, 당신의 의견은 "자기"가 실제로 가리키고있는 부분을 조사하고 소스 컨트롤러를 띄울 수 없어 Eric Lars0n의 솔루션을 다시 시도 할 수 있음을 깨닫게했습니다. –

7

이것은 차후 독자에게 깨끗한 읽을 수있는 솔루션을 제공하고 관련 문제를 명백하게 공식화하기위한 요약 답변입니다.


문제에 대한 해결책은 다음과 같은 코드>

문제/혼란 사실에있다
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    [segue.destinationViewController setHidesBottomBarWhenPushed:YES]; 
} 

, 그 theprepareForSegue에 : 방법, 그것의 속성을 "hidesBottomBarWhenPushed"을 설정할 수 있습니다 소스 뷰 컨트롤러 (현재 시점에서 볼 수있는 뷰 컨트롤러) 또는 대상 뷰 컨트롤러 (스택에 푸시되고있는 뷰 컨트롤러)에 있습니다. 이 방법을 설정하면 문제의 첫 번째 부분 즉, 즉 해결됩니다. 귀하의 TabBar가 숨겨집니다. 이것이 내 전 코드에서 "숨어있는"부분이 작동하는 이유입니다. 소스 viewcontroller에서 속성을 설정했습니다. 내 코드에서

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    self.hidesBottomBarWhenPushed = YES; 
} 

여기서 "self"는 대상보기 컨트롤러가 아니라 대상보기 컨트롤러를 가리 킵니다. 그래서 이것을 대상보기 컨트롤러로 설정해야합니다 ...

마지막 문제는 ..점 표기법이 코드>

segue.destinationViewController.setHidesBottomBarWhenPushed = YES; 

당신은 피 시험 메모리 솔루션은 정확히 명시 애플의 사양에 따라되는이

[segue.destinationViewController setHidesBottomBarWhenPushed:YES]; 

같은 setter 메소드를 호출 작동하지 않는다 "하단 바까지 숨겨진 유지 뷰 컨트롤러 (hide 속성이 YES로 설정되어 있음)이 스택에서 팝됩니다. "

마지막 일을하는 speficic SEGUE

-(void)prepareForSegue:(UIStoryboardSegue *)segue 
       sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"SegueIdentifier"]) 
    { 
     [segue.destinationViewController setHidesBottomBarWhenPushed:YES]; 
    } 
} 

나는 두 사용자 (현상금 애쉬 밭고랑로 이동에 대한 보상을 분할하고에 숨김 속성의 설정을 좁힐 것을 잊지 마세요, 가능 솔루션 Eric Lars0n에게, 이것은 내가 현상금과 수령에 관한 규칙을 읽은 뒤에 올 수있는 가장 가까운 것입니다).

+0

도트 표기법이 왜 작동하지 않는지에 대해 좀 더 자세히 설명해 주시겠습니까? –

+0

버그 일 수도 있지만, 불행히도 나는 모른다. –

1

prepareForSegue[segue.destinationViewController setHidesBottomBarWhenPushed:YES];을 입력하면됩니다.

나를 위해 잘 작동합니다.

관련 문제