2014-10-14 3 views
15

숨겨진 탐색 모음이있는보기 컨트롤러에서 보이는 탐색 막대가있는보기 컨트롤러를 밀어 넣으려고합니다. 탐색 막대가없는보기 컨트롤러에서 탐색 막대가있는 밀어 넣기/팝업보기 컨트롤러

나는

// First View Controller 

@implementation FirstViewController 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [[self navigationController] setNavigationBarHidden:YES animated:NO]; 

    NSLog(@"[%@ viewWillAppear]", self); 
} 

@end 


// Second View Controller 


@implementation SecondViewController 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [[self navigationController] setNavigationBarHidden:NO animated:NO]; 

    NSLog(@"[%@ viewWillAppear]", self); 
} 

@end 

아무 일없는 등 viewWillAppear, viewDidAppear, viewWillDisappear ...에 [[self navigationController] setNavigationBarHidden:YES animated:NO];의 모든 종류의 조합을 시도했다. 나는 또한 push와 pop을 작동시키는 커스텀 코드를 시도했다. 그러나 나는 가장자리를 쓸어 넘기고 패닝을 볼 수 없다. 내가 더 깊게 파고 들기 전에, 내가 바퀴를 다시 발명하지 않고 있는지 확인하고 싶습니다.

스타 벅스 앱이 내가 흉내내는 앱입니다.

앱의 루트보기 컨트롤러 (어두운 배경보기)는 전체 화면이며 UINavigationBar가없는 것을 확인합니다. 그러나 단추 중 하나를 누르면 UINavigationBar가있는보기 컨트롤러 (밝은 배경보기)가 표시됩니다. 거기에서 "뒤로"화살표를 누르면 탐색 막대가있는 제어기 팝업이 표시됩니다. 대화 형 팝 스 와이프 제스처도 작동합니다.

Starbucks iOS App

+0

내비게이션 막대가 두 번째보기에 표시되어 다시 버튼이 표시되는 유일한 이유는 무엇입니까? 아니면 네비게이션 바가 필요한 다른 것 (제목/부제는 제외하고)이 있습니까? – sfeuerstein

+0

확실히 뒤로 버튼이 필요하지만 사용자가 더 깊이 뚫고 나올 때 기능적 탐색 컨트롤러/바가 필요합니다. – YarGnawh

+0

아, 알았어요. popViewControllerAnimated를 호출하고 탐색 막대를 숨긴 상태로 유지하는 뒤로 버튼이있는 맨 위에 사용자 정의보기를 추가 할 수 있다고 말하려고했습니다. 나는 여전히 당신이 할 수 있다고 생각하지만, 당신이 더 깊이 훈련 할 때 얼마나 복잡한 일이 일어나는 지 모르겠다. – sfeuerstein

답변

24

솔루션을 직접 해킹하지 않고도 가능합니다.

루트의 ViewController :

@implementation ViewController 

.... 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [self.navigationController setNavigationBarHidden:YES animated:animated]; 
} 

@end 

그리고 추진의 ViewController : 이것은 할 것

@implementation SecondViewController 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [self.navigationController setNavigationBarHidden:NO animated:animated]; 
} 

@end 

을 여기에 당신이 할 것입니다. 또한 상호 작용 전환을 유지합니다.)

그러나이 유형의 기능은 사과에 의해 전혀 문서화되지 않았습니다. - 당신은 또한 숨길 수와 쇼 도구 모음이 viewWillAppear 내부 ('포인트를 호출':

편집 난 그냥이 당신이 당신의 질문에 쓴 같은 코드는 것을 깨달았다

. 다시 테스트 해주세요. 나는 이것이 효과가 있다는 것을 100 % 확신한다. 나는 나의 애플 리케이션 중 하나에서이 기능을 사용했다.

내 코드는 animated:NO 대신 animated:animated을 사용합니다. 여기에 중요한 포인트가 될 수 있습니다 :)

+0

"내 코드는 애니메이션을 사용합니다 : 애니메이션 대신 애니메이션 : 아니요. 여기가 중요한 포인트 일 수 있습니다 :) 실제로 실제로 중요한 포인트였습니다. 감사! – YarGnawh

+0

'animated' BOOL을 건네주는 것이 나를위한 키커였습니다. 단순히 YES/NO를 전달하면 대화 형 (뒤로 드래그) 팝 애니메이션을 수행 할 때 이상한 탐색 모음 동작이 발생했습니다. – marcshilling

+0

'BOOL navigationBarHidden' 속성을'UIViewController' 기본 클래스에 저장하면 그것을 숨기는 viewController에 대해 속성을'YES'로 설정하고'viewWillAppear'를 오버라이드하여'[self.navigationController setNavigationBarHidden : self.navigationBarHidden animated : animated];' – skensell

1

나는 단지 등이 뒷면을 테스트하기 위해 두 개의 뷰 컨트롤러를 설정합니다.

@interface VC1() 

@end 

@implementation VC1 

- (void)viewDidLoad { 
[super viewDidLoad]; 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
[super viewWillAppear:animated]; 
self.navigationController.navigationBarHidden = YES; 
} 

@end 

및 제

#import "ViewControllerTwo.h" 

@interface ViewControllerTwo() 

@end 

@implementation ViewControllerTwo 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    self.navigationController.navigationBarHidden = NO; 
} 

@end 

VC1은 ViewControllerTwo로 이동 버튼과, (응용 프로그램의 루트 컨트롤러)가있는 navigationController에 포함된다. 나는 VC1에서 푸시 segue -> ViewControllerTwo이 방법은 작동합니다. 버튼을 누르면 뷰 컨트롤러가 ViewControllerTwo에 표시됩니다. 뒤로 누르면 내비게이션 막대가 사라집니다.

+0

도 내가 먼저 한 일 이었지만 창조적 인 것은 그 비행을 내버려 두지 않았습니다. 뷰 컨트롤러를 왼쪽에서 스 와이프하여 뷰 컨트롤러를 팝하면 뷰 컨트롤러를 따르는 대신 탐색 모음이 즉시 사라집니다. – YarGnawh

+0

명확한 설명을 위해 문제는 네비게이션 바를 제거 할 수 없다는 것, 네비게이션 바가 함께 튀어 나오도록 ViewController 옆에 애니메이션으로 표시되도록하려는 것입니다. – domitall

+0

수정하십시오. 혼란을 드려 죄송합니다. – YarGnawh

관련 문제