13

1 단계 : 새로운 UIViewController에 작성 :
- 엑스 코드 -> 새 파일을 ... -> 코코아 터치 클래스 -> UIViewController에
- 이름 : MyViewControllerInterface Builder로 내비게이션 컨트롤러를 추가하는 방법은 무엇입니까?

2 단계 : 드래그 MyViewController.xib하는 라이브러리에서 "탐색 컨트롤러"(UINavigationController가)를 떨어 뜨리면

alt text

3.Step : 나는 네비게이션 컨트롤러를 올바르게 연결하기 위해 뭔가를해야한다는 것입니다. 그렇죠?

4.Step :

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
NSLog(@"navContr: %@", myViewController.navigationController); 
[self.navigationController presentModalViewController: myViewController animated:YES]; 

결과 : 모달 대화로 새로운 뷰 컨트롤러를 시작해보십시오 "navContr : 전무"

5.Step : 당신이 볼 수있는 새로운 모달보기 (MyViewController)가 있지만 NavigationController가없고 UINavigationBar도 없습니다.

도움 주셔서 감사합니다.


UPDATE 1 :

6.Step : 내가 "루트보기 컨트롤러"로 새로운 UIViewController에 (ViewNavi2)을 설정합니다
alt text

7.Step : 클래스 MyViewController에 IBOutlet UINavigationController *navigationController을 정의하고 xib : Navigation Controller -> Connections -> Referencing Outlets을 구성하십시오.

는하지만 내 네비게이션 컨트롤러는 전무 :-(에게 여전히

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
NSLog(@"navContr: %@", myViewController.navigationController); 
// -> "navContr: nil" 
+2

[여기] (http://rdcworld-iphone.blogspot.in/2013/03/how-to-add-navigation-controller-in.html)는 내비게이션 컨트롤러 – swiftBoy

답변

15

또한 NIB 파일에 탐색 컨트롤러를 포함하려고했지만 Apple 설명서에서 말하는 것은 "최적이 아닙니다 "실제로 그것을하는 방법을 설명하지 않고. 내 메인 탭 윈도우에서 프로그래밍 방식으로 탐색 컨트롤러를 정의하지 않고 일반적인 탐색 컨트롤을 포함하는 모달 창을 호출하기를 원했습니다. 나는 내가 어떻게했는지에 관해 이야기 할 것이다.

MyViewController에 IBOutlet UINavigationController *navigationController을 정의 했으므로 코드가 내 것과 매우 유사합니다. Interface Builder에서 필자는 단순히 루트보기 컨트롤러에서 내 뷰를 정의하고 파일 소유자 -> 뷰를 해당 뷰 정의로 설정했습니다.

그리고 유사 코드에

, 나는 내 부모 창에서 다음을했다 :

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
[self presentModalViewController:myViewController animated:YES]; 

내가 이것을 시험 할 때 (. 난 당신이 self.navigationController을 가지고 왜 모르겠어요 자체에 presentModelViewController를 호출 오전) 그 결과 내보기가 NIB 파일에서로드되었지만 탐색 모음이 누락되었습니다. MyViewController의 코드 하나 더 선은 고정이 :

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self setView:myNavigationController.view]; 

} 

내가 여기서 뭐하는 거지 모두, 네비게이션 컨트롤러를 포함하여 NIB 파일에 정의 된 모든 것이 포함되어 myNavigationController.view을 가리 키도록 MyViewController의보기를 설정하는 것입니다.

+1

대단히 감사합니다. 나는 이것이 많은 사람들을 도울 것이라고 확신한다! :-) @all : 제발 투표하십시오 – Manni

+0

@Henry 나는 비슷한 것을 시도했습니다. 이것은 저에게 많은 일을 덜어 줬습니다. 감사! – Besi

+0

매우 아름다운 설명. 고맙습니다. –

0

다음 코드는 당신에게 유효한 객체를주지 않을 것이다. UIViewController에 only returns a navigation controller if the view controller is in its stack. This property is nil if a navigation controller cannot be found. 귀하의 뷰 컨트롤러의있는 navigationController 속성이 탐색 컨트롤러의 스택에 있지 않기 때문에

NSLog(@"navContr: %@", myViewController.navigationController); 

이유입니다. 어쨌든 네비게이션 컨트롤러를 올바르게 초기화했는지 확신 할 수 없다. 몇 가지 문서를 읽으십시오.

+0

을 추가하기위한 간단한 자습서입니다. 도와주세요! 그것은 "보기 컨트롤러가 스택에 없다"는 것을 말해줍니다. 예, 내 탐색 컨트롤러를 올바르게 초기화하지 않은 것 같습니다. 하지만 Interface Builder에서 어떻게 할 수 있습니까? 내 질문을 업데이트합니다. "업데이트 1"을 확인하십시오. – Manni

+0

또한, 귀하의보기가 탐색 컨트롤러 스택에 있지만 당신이 가져서는 안되는 어딘가에서 그것을 풀어 놓으면 (self), self.navigationController는 nil 일 수 있습니다. 도! – AndrewS

2

"탐색 기반 응용 프로그램"에 대한 XCode의 템플릿을 확인하십시오. (New Project -> Navigation-based Application) 그런 다음 Interface Builder에서 MainWindow.xib를 엽니 다. 보기가 아니지만 1 단계에서 만든 viewcontroller로 생각하십시오. 그런 다음 관리자가 참조하는 "Root View Controller"를보고 "Root View Controller"펜촉에 어떻게 연결되어 있는지보십시오 Identity inspector의 Attributes inspector 및 "RootViewController"클래스를 사용합니다.

"RootViewController"버전의 탐색 루트에 표시 할 내용을 넣을 수 있습니다. 일반적으로 다음에 표시되는 컨트롤러는 "DetailViewController"입니다.다시 템플릿이 제공하는 예제 코드를 읽어 보면 시작하는 방법을 알 수 있습니다. RootViewController.m의 예제 템플릿에서 주석 코드 (didSelectRowAtIndexPath)를보십시오. DetailViewController 역할을하는 뷰 컨트롤러를 직접 만들어야합니다.

이 내용이 도움이되기를 바랍니다.

// 귀하의 코멘트를 기반으로 편집 //
Apple 문서에 따르면 IB를 사용하여 내비게이션 컨트롤러를 만들기를 원한다면, 실제로 MainWindow.xib에 넣어야합니다. NavigationController를 UIView 객체의 하위 뷰로 사용할 수 없다는 사실을 고민했습니다. 시작한 곳에서 할 수있는 일은 IB를 사용하여보기 컨트롤러에 탐색 막대 객체를 추가 한 다음 거기에서 항목을 제어하는 ​​것입니다.

Apple 설명서에서 "기본 nib 파일 (또는 다른 nib 파일)에서 독립형 또는 모 델로 제공되는 탐색 컨트롤러를로드 할 수도 있지만 최적의 방법은 아닙니다. 네비게이션 컨트롤러를 프로그래밍 방식으로 사용할 수 있습니다. "

// MORE EDITS // XCode4에서 프로젝트 템플릿은 이제 "마스터 세부 정보"프로젝트라고합니다. 이것은 iPad에서 분할보기 컨트롤러로 설정되지만 iPhone의 일반 탐색 프로젝트로 설정되기 때문입니다. 대답에서 "RootViewController"를 참조하면 "MasterViewController"라는 것을 찾을 수 있습니다

+0

도움 주셔서 대단히 감사합니다! 탐색 기반 응용 프로그램을 신중하게 분석합니다. 예, 작동하는 탐색 컨트롤러가있는 MainWindow.xib가 있습니다. AppDelegate와 연결되어있어 MyViewController와 유일한 차이점입니다. 템플릿 프로젝트에서는 MainWindow를 볼 수 없습니다.xib 초기화되고 어쩌면 내 코드 "MyViewController * myViewController = [[MyViewController alloc] initWithNibName : @"MyViewController "번들 : nil];" 잘못된 것입니다. 내 질문에 "업데이트 1"보세요. – Manni

+0

Apple 문서 "메인 nib 파일 (또는 다른 nib 파일)에서 독립형 또는 모 델로 제공되는 탐색 컨트롤러를로드 할 수도 있지만 최적의 방법은 아닙니다. 이러한 시나리오에서는 일반적으로 프로그래밍 방식으로 탐색 컨트롤러를 만드는 것이 더 쉽습니다 사용 시점에. " – Walter

+0

네, 그렇습니다. 프로그래밍 방식으로 탐색 컨트롤러를 만드는 것이 더 쉬울 수도 있지만 Interface Builder를 사용하여이 작업을 수행해야합니다. 여기에서 찾을 수있는 이유는 다음과 같습니다. http://stackoverflow.com/questions/4604647/how-to-create-an-uiviewcontroller-with-uinavigationcontroller-with-interface-buil 저를위한 아이디어가 있습니까? – Manni

관련 문제