1

여기 내 문제가 있습니다. 보기 기반 응용 프로그램이 있습니다. 다음과 같이 AppDelegateNavigationController을 추가했습니다.IOS. 내비게이션 컨트롤러. 재사용 ViewController

UINavigationController *nvc = [[UINavigationController alloc] initWithRootViewController:_viewController];  
navigationController = [nvc retain]; 
[nvc retain];  
[self.window addSubview:navigationController.view]; 

이 코드는 인터넷에서 가져 왔습니다. 그것이 맞는지 나는 모른다.

모든 viewControllers에서 다음을 수행하여 새보기를 푸시합니다. self.navigationController이 밀어보기에 전무를 반환하지 않는 이유

UIViewController *newViewController = [[NewViewController alloc] init]; 
[self.navigationController pushViewController:newViewController animated:TRUE]; 
  1. 모르겠어요. 그것은 AppDelegate 탐색 컨트롤러를 어떻게 든 사용하고 있습니까?

  2. 일부보기 컨트롤러를 재사용하고 싶습니다. 뷰 컨트롤러를 호출 할 때마다 init을 할당하지 않는다는 뜻입니다. 어떻게해야합니까? AppDelegate에 참조 번호를 저장 하시겠습니까? 다른 해결책?

  3. 복잡한 탐색이 있습니다. 즉, A, B, C는 뷰 컨트롤러이다. A 호출 B. B 호출 C. C 호출 A. 계속 호출 할 때마다 새보기 컨트롤러를 만들고 있습니다. 어떻게 그 뷰 컨트롤러를 재사용 할 수 있습니까 (또는 새로운 뷰를 호출 할 때 스택에서 뷰를 팝 해제 할 수 있습니까?).

감사합니다.

답변

0

1) navigationControllerUIViewController의 속성입니다. 뷰 컨트롤러가 네비게이션 컨트롤러 계층 구조의 일부이면 설정됩니다.

2) 직접 관리해야합니다. 해당 뷰 컨트롤러를 푸시하는 객체에 레퍼런스를 저장하는 것이 일반적인 방법입니다. 따라서 A가 B를 누르고 A가 B 등에 대한 참조를 저장하는 경우

3) UINavigationController을 수행 할 수있는 방법이 없습니다. 당신이하려고하는 것에서 당신은 안드로이드 배경에서 온다고 가정합니다. 안드로이드는 그 일을하는 특별한 방법이 있지만, iOS에서는 코드를 직접 코딩해야합니다. UINavigationControllerDelegate 및 그 방법의 navigationController:didShowViewController:animated:을 보면이 작업을 수행 할 수 있습니다. 보기 컨트롤러가 푸시되고 스택에 이미있는 경우 탐색 스택 (예 : viewControllers 속성이 UINavigationController)을 업데이트하여 위치를 삭제할 수 있습니다. 그러나 그것은 사용자에게 상당히 혼란 스러울 수 있습니다.

+1

아마도 답변은 NavigationController를 사용하지 않습니다. 새로운보기 컨트롤러를 사용하지 않고 밀어 넣을 수있는 방법이 있습니까? 새로운보기 컨트롤러를 아무 스택에 추가하지 않고 밀어 넣기 만해도 문제가 해결 될 수 있습니다. 어떻게 생각해? – Tony

+0

전적으로 사용자가 앱과 상호 작용하는 방식에 달려 있습니다. 'presentModalViewController : animated :'를 사용하여 새로운 뷰 컨트롤러를 보여줄 수도 있습니다. 그러면 새로운 뷰 컨트롤러가 현재 UI의 맨 위에 모달이됩니다. – mattjgalloway

+0

Matt, viewcontroller A, B 및 C가 있다고 가정하십시오. A가 기본입니다. A는 B로 갈 수 있고 B는 B로 갈 수 있습니다. B 또는 C는 A로 돌아갈 수 있습니다. A-> B, B <-> C, C-> A, B-> A. A의 네비게이션 컨트롤러, B의 푸시, B가 C의 C를 호출 할 때 동시에 A의 네비게이션 컨트롤러에서 B를 팝 할 수 있습니까? 다음과 같습니다. - A는 B를 호출합니다. 탐색 컨트롤러 스택 : A, B - B가 C를 호출합니다. 탐색 컨트롤러 스택 : A, C - C가 B를 호출합니다.탐색 컨트롤러 스택 : A, B - B가 A로 돌아갑니다. 탐색 컨트롤러 스택 : A 맞습니까? 다른 뷰를 호출 한 후 어떻게 뷰를 팝핑 할 수 있습니까? – Tony

관련 문제