2013-03-14 2 views
2

내 루트보기 컨트롤러 (R)에 네비게이션 컨트롤러 (N)에 세그 (segue)를 트리거하는 버튼이 있습니다. 네비게이션 컨트롤러 내부에서 네비게이션 스택에있는 모든 뷰 컨트롤러 (N.0, N.1, N.2, ...) 사이를 전환 할 수 있으며 모든 뷰 컨트롤러에는 바로 루트보기로 바로 돌아 가기위한 단추가 있습니다 컨트롤러 (R).탐색 컨트롤러의 상태를 유지하는 방법은 무엇입니까? (pre iOS 6)

나는 이것을 달성하기를 원한다 - 루트보기 컨트롤러 (R)의 버튼이 눌려 질 때마다 네비게이션 컨트롤러 (N)가 이전 구성으로 다시 나타난다. 예 : 네비게이션 컨트롤러를 닫을 때까지 마지막으로 볼 수있는 뷰 컨트롤러가 (N.1)이었던 경우 네비게이션 컨트롤러가 (N.1)을 다시 표시하길 원합니다.

현재 루트보기 컨트롤러 (R)에서 탐색 컨트롤러 (N)까지 세그먼트를 트리거 할 때마다 항상 나타나는 탐색 루트보기 컨트롤러 (N.0)입니다. (iOS는 segue가 트리거 될 때마다 새 탐색 컨트롤러를 인스턴스화합니까? 아니면 여전히 동일한 객체입니까?)

내비게이션 컨트롤러가 다시 제공 될 때 어떻게 내비게이션 컨트롤러의 상태를 유지하고 복원합니까?

(iOS 6에는이 용도로 사용할 수있는 restorationIdentifier 속성이 있지만 iOS 5를 실행하는 장치를 지원하려면 앱을 원하고 이전에이 동작을 수행하는 방법이 있어야합니다. 아이폰 OS 6)

Storyboard Screenshot

답변

0

거랑 항상 대상 뷰 컨트롤러의 새로운 인스턴스를 생성한다. 아마 당신은 popToRootViewControllerAnimated :으로 루트 컨트롤러에 "뛰어"갔을 것입니다. 그러면 아마도 모든 팝된 뷰 컨트롤러가 파괴 될 것이므로 되돌릴 것이 없습니다. 뷰 컨트롤러의 웹을 탐색하려면 UINaviationViewController 또는 segues를 사용할 수 없습니다.

+0

버튼을 누를 때 '[self.navigationController dismissViewControllerAnimated : YES completion : nil]; ' 메서드를 호출하여 (N.1)에서 (R)로 돌아갑니다. 따라서 루트보기 컨트롤러로 다시 이동하기 전에 탐색 스택에서보기 컨트롤러를 팝업하지 않습니다. 단추를 누른 후 나중에 복원 할 때 탐색 컨트롤러의 상태를 유지할 방법이 없습니까? – Mischa

+0

탐색 컨트롤러는 스택 아키텍처입니다. 나는 당신이 그렇게 행동 할 수 있다고 생각하지 않습니다. 어쨌든, 당신이 이것을하고 싶다면 항상 목적지보기 컨트롤러의 새로운 사본을 인스턴스화하기 때문에 스토리 보드 단편을 사용할 수 없습니다. –

+0

Charlie가 말했듯이 루트 컨트롤러의 segue를 사용하여 탐색 컨트롤러를 표시하지 마십시오. 시도해 볼 수있는 것은 루트 컨트롤러의 탐색 컨트롤러를 프로그래밍 방식으로 인스턴스화하고 루트 컨트롤러에서 인스턴스 컨트롤러로 참조를 유지 관리하는 것입니다. 다음 번에 nav 컨트롤러를 다시 표시해야합니다. 인스턴스가 이미 인스턴스화되어 있는지 확인한 다음 인스턴스를 사용하여 표시합니다. 그렇지 않으면 새 인스턴스를 만듭니다. 그것이 효과가있을 것인지 아닌지는 잘 모르겠지만 시도해보십시오. – AC1

관련 문제