2011-05-12 1 views
3

내 앱에서 뷰 탐색을 미리 계획하지 않았으므로 사용자가 모달 뷰를 서로 쌓아 올릴 수있는 루프를 통과 할 수 있습니다 루트보기 컨트롤러는 반복적 인 모든보기를 수동으로 해제하는 시간 소모적 인 프로세스를 통해서만 액세스 할 수 있습니다.내비게이션 컨트롤러가없는 다중 모달 뷰 닫기

내비게이션 컨트롤러가 없으면 popToRootViewControllerAnimated:을 사용할 수 없습니다. (presetModalViewController:animated: 번을 호출하는 것이 반복적으로 좋은 생각 인 것처럼 보입니다.) Google에서 나에게 숨어있는 것이 없으면 나는 완전히 잃어버린.

내비게이션 코드의 절반을 다시 작성하는 것이 이상적은 아니지만, 실제로 이것이 유일한 옵션 인 경우, 한 번만 시도해 보겠습니다.
확실히 피하는 것이 바람직합니다.

어떤 코드가 도움이되는지 알지 못합니다. 몇 가지 하위 클래스가있는 모달보기 컨트롤러를 표시하거나 해제하는 것입니다.

답변

0

좋아, 이제 알았다. 그 밑에 내가 결코 해선 안되는 것이있다. 루프로 자란 스택을 포함하려고 시도하는 것보다 먼저 막아야했습니다.

즉, "로드"버튼이 더 이상 다른보기를 생성하지 않습니다. 대신, 현재 뷰를 닫습니다. 뷰는 Load 뷰의 자식 일뿐입니다. 새로운 뷰가 보이고 제어 할 수 없게 늘어나는 스택의 문제를 완전히 제거합니다.


다시, 이것은 잘못된 방법입니다 :

글로벌, 몇 #define 문자열을 거라고, 일부/경우 다른 스택 및 탐색 컨트롤러의 부족은 문제가되지 않습니다.

누구나 내가이 일을 성취하기 위해 무엇을했는지 (그리고 나중에 얼마나 재미 있을지) 흥미를 느낀다면이 대답에 그 중 일부를 떨어 뜨릴 것입니다. 그것은 꽤 아니었고 (주로 새로운 코드가 4 개의 파일에 걸쳐서 조용히 깨 졌기 때문에) 작성하는 것이 어려웠지만, 내가 원하는 것을 정확하게 수행합니다.

+0

중요하지는 않지만 사용자가 전환을 애니메이션으로 표시할지 여부를 결정할 수 있도록하기 위해 무엇인가를 던졌습니다. BOOL이 NO로 설정된 경우, 현재와 루트 사이의 뷰는 표시되지 않습니다. 애니메이션의 경우 : 예, 단 몇 분의 1 초 동안 둘 사이의 모든 뷰를 표시하는 것이 아니라 상위에서 루트로 전환하는 것이 더 낫습니다. 내가 무엇을 할 수 있는지 알아볼 게. – Thromordyn

+0

긁힘. 스택에 4 개 이상의 뷰 (루트 포함)를 가질 수 없으므로 특정 전환에 대한 애니메이션을 끄는 것이 그리 큰 문제는 아닙니다. – Thromordyn

0

UIViewController의보기 속성이 변경되지 않습니까?

+0

나는 당신이 의미하는 것을 이해하지 못한다고 생각합니다. – Thromordyn

2

답변 A : 쉬운 대답;

보고 싶은보기에서 dismissModalViewController:animated:으로 전화하면됩니다.

답 B : 실제 답변;

네비게이션 컨트롤러 앱으로 다시 고려하지 않아도되며, 네비게이션 앱인 새 프로젝트를 시작하고 애플리케이션 위임의 메소드를 살펴보고 그 동작을 에뮬레이션합니다.

당신은 일반적으로 현재, 단지 ([self.navigationController pushViewController: controller animated: YES])를 밀어하고 그래 디의 대답이 바로 그들이다 @

+0

내가 말했듯이 루프가 있지만 UI가 엉망이되어 사용자에게 불편을 끼쳐서 불쾌감을주는 버튼을 제거하고 싶지 않습니다. 나는 쉬운 길을 택하고 적절한 네비게이션 컨트롤러를 구현하지 않으려 고 노력했다. (대부분 IB는 그런 것들을 바꾸는 것에 까다로워하기 때문에.) 어쨌든 적어도 내가 할 수있는 것을 볼 것이다. 않는 한 누군가) 내가 원래 원했던 해결책이 떠오른다. – Thromordyn

+0

IB는 네비게이션 바가 신경 쓰이지 않는다. 레이아웃이 설정된 경우에만 네비게이션 바가 보이면 네비게이션 바를 보이지 않고 네비게이션 컨트롤러를 사용할 수있다. 당신은 하단에 툴바를 사용하거나보기의 중간에 버튼을 사용할 수 있습니다, 네비게이션 컨트롤러는 상관하지 않습니다. –

+0

네비게이션 컨트롤러는 몇 가지 생각을 한 후에 가장 좋은 옵션으로 들리지만, 구현 방법에 대해서는 확신 할 수 없습니다. 내일 내가 뭔가를 찾을 수 있는지 알게 될거야. – Thromordyn

1

모두 도움이 팝업 ([self.navigationController popViewControllerAnimated: YES])

희망이 될 것이다 해고 할 때. -dismissModalViewController:animated:에 대한 설명서에보기 당신을 알려줍니다

경우 현재 여러 모달보기 연속 컨트롤러, 따라서 빌드 낮은에서 뷰 컨트롤러에이 메서드를 호출 모달보기 컨트롤러의 스택, 스택 은 해당 자식 뷰 컨트롤러와 모든 뷰 컨트롤러 을 스택의 해당 자식 위에 둡니다. 이 발생하면 최상위보기 인 만 애니메이션 방식으로 해제됩니다. 중간보기 컨트롤러는 스택에서 단순히 제거 된 입니다.

모달 컨트롤러는 탐색 스택의 일부가 아니기 때문에 nav 스택에서 컨트롤러를 팝하는 대신 -dismiss ...를 사용해야합니다. 그럼에도 불구하고 앱이 탐색 기반 앱이어야한다는 것을 알게되면 시간을내어 그렇게 만들 수 있습니다. 그게 많은 일이라면 어쨌든해야 할 일이 될 것입니다.