2011-11-23 2 views
3

탐색 문제가 있습니다.다른 뷰 아래에서 모달 뷰 컨트롤러를 가져 오려면 어떻게해야합니까?

화면에서 시작 A. 버튼을 누르면 화면 B가 A를 포함하는 모달보기 컨트롤러로 나타납니다. 첫 번째 시나리오에서 화면 B가 닫히면 화면이 아래로 슬라이드됩니다. 현재 화면 A를 포함하고있는 새로운 모달보기 컨트롤러 인 화면 C를 나타냅니다. C가 닫히면 화면 A가 다시 표시됩니다. 두 번째 시나리오에서 화면 B가 닫히면 화면 A를 덮고있는 모달 화면 D가 나타납니다.

내 가장 큰 문제는 닫히기 전에 모델 대화 상자 C 또는 D를 B 뒤에 표시하는 방법을 찾을 수 없다는 것입니다. B에서 어떤 일이 일어날 때까지 나는 C 나 D를 만들어야하는지 모른다. 그래서 나는 C의 부모를 C의 부모로 시작할 수 없다. 또한, 내가 할 수있는 경우에도 나는 문제가 진술에서 설명한대로 작동하도록 애니메이션을 얻을 수 없습니다.

이 시나리오를 어떻게 만들 수 있을지 생각해보십시오.

답변

0

표준 모달보기 컨트롤러 시나리오를 사용할 수없는 것으로 보입니다. 유일한 해결책은 이것을 단일보기 컨트롤러로 만들고 사용자 지정 애니메이션을 사용하는 것이 었습니다. 특히 바람직하지 않았기 때문에 탐색 구조가 변경되었습니다.

1

전략 1 : 앱에 맞는 것이라면 모달이 아닌 탐색 컨트롤러 사용을 고려해보십시오. 당신이 나 애니메이션 않고, 뷰 컨트롤러 스택을 재구성 할 수 있습니다

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated 

: NSNavigationController은 편리한 방법이 있습니다. 아마도 애니메이션을 사용하지 않고 새로운 VC를 맨 아래 (현재의 것) 아래에 삽입하도록 스택을 변경하면됩니다. 그런 다음 완료 버튼 (또는 이와 유사한 버튼)을 클릭하면 맨 아래 VC가 새 VC를 나타냅니다.

전략 2 : 이것은 좀 더 실험적으로 작동하지 않을 수 있지만 '제 시간에 맞춰'보기 컨트롤러 삽입을 수행하면 사라질 수 있습니다. 예를 들어, VC A의 경우 viewWillAppear.을 구현합니다.이 메서드는 일반적으로 해제 된 UI의 애니메이션 시작 부분에서 바로 호출되며, 새 VC를 삽입하기에 좋습니다 (예 : 애니메이션없이 모달 표시). 위의 VC에 대한 애니메이션이 막 시작되었습니다. 내가 말했듯이, 귀하의 마일리지는 다를 수 있습니다.

+0

네비게이션 컨트롤러를 사용하면 여러보기를 더 깨끗하게 구현할 수 있다는 것에 동의합니다. 모달은 드물게 사용해야합니다.모달이 필요한 경우 항상 모달 내 탐색보기를 만들 수 있습니다. 어떻게 작동하는지 예를 보려면 foursquare 앱을보십시오. 멋지게 추가 할 수 있습니다. –

+0

네, 일반적으로 중첩 된 모달 (너비, 깊이 2)을 nav 컨트롤러 나 다른 것을 사용하여 더 잘 구조화 될 수 있다는 표시로 사용합니다. 모달 아래에서 VC를 전환하는 것이 쉽지 않다는 사실은 사용자가 의도 한 것이 아니라는 표시입니다. 모달은 특정 측면에서 사용자 상호 작용에 초점을 맞추기위한 것이지 일반적인 탐색 용도로는 사용되지 않습니다. – occulus

+0

빠른 메모, 전략 2가 작동하지 않습니다. 오류는 없지만 두 번째 모달은 첫 번째 모달이 여전히 해제되는 경우 표시되지 않습니다. 또 다른 메모, 애플의 휴먼 인터페이스 가이드 라인에 맞춰 모달을 사용하고 있습니다. 저는 기술 솔루션에 더 관심이 있습니다. –

0

the Apple docs는 "모든 뷰 컨트롤러 객체가 모달 다른 하나의 뷰 컨트롤러를 표시 할 수 있습니다.이 경우에도 자신이 모달 발표되었다 뷰 컨트롤러 마찬가지입니다 참조하십시오. 즉, 함께 체인 모달 뷰 컨트롤러에 필요한 수 필요에 따라 다른 모달 뷰 컨트롤러 위에 새로운 모달 뷰 컨트롤러를 제공합니다. "

따라서 NavigationController를 모달로 표시 할 수 있습니다.

그러나 네비게이션 컨트롤러의 루트보기 컨트롤러를 쉽게 전환 할 수는 없습니다 (하나의 가능성 is here).

다른 방법으로는 NavigationController를 모달로 표시하지만 사용자가 두 번째 View (화면 B)를보고 두 번째 ViewController를 누른 다음 첫 번째 (화면 C)로 돌아가서 화면을 닫습니다. 모달 NavigationController가 화면 A로 돌아갑니다.

관련 문제