2009-11-25 6 views
4

세로 모드보다 가로 모드에서 다른 레이아웃이 필요한보기를 제어하는 ​​ViewController가 있습니다. 의미 상 동일하지만 레이아웃이 다른 두 개의 .xib 파일을 만들었습니다. 가로 모드에서 두 번째 ViewController를 모달로 표시하는 해킹이 있다는 것을 알고 있지만 방향 전환시 다른 nib 파일로 뷰 컨트롤러를 다시 초기화해야합니다.주어진 ViewController에 대해 대체 nib 파일을 어떻게 바꿀 수 있습니까?

나는 반으로 작동합니다. 문제의 (탭 표시 줄)보기를 보면서 장치를 켜면 장치가 아니라 페이지가 사라집니다. 그러나 다른 탭으로 전환하여 문제의보기로 돌아 오면 원하는대로 표시됩니다.

다시 레이아웃 할보기를 보면서 닙을 전환 할 수 있으며 사라지지 않게하려면 어떻게해야합니까?

지금 저는 -didRotateFromInterfaceOrientation에서 방향 감지를하고 있습니다. -viewDidAppear :도 있습니다. self.view = nil을 설정하고 initWithNibName : bundle :을 호출합니다. 합리적인 방법으로 작동하도록 만들 수 있습니까? 아니면 모달 핵 (modal hack)에 의존해야합니까?

답변

0

아니요. 그것은 지원되지 않습니다, 나는 애플이 미래에 올 것이라고 말했다고 생각하지만, 지금은 자동 크기 조정 마스크와 레이아웃 정보를 사용합니다.

또한 : 자신이 nil을 호출 한 다음 컨트롤러의 코드가 계속 실행되어 계속 실행할 수 없습니다.

+0

감사합니다. 뷰 컨트롤러는 자신을 nil로 설정하지 않으며, 뷰를 nil로 설정합니다. 그리고 이것이 올바른 효과를 갖는 것으로 보이는 부분입니다. 또한, 자동 크기 조정 마스크가 할 수없는 레이아웃이 필요합니다. 따라서 이것이 작동하지 않으면 모달 뷰 컨트롤러 만 표시하면됩니다. – Shel

+0

음 ... 네, 다른 별개이지만 연결된 뷰가 속임수를 쓰는 것처럼 들립니다. 이제 풍경 모드에서 모달보기를 표시하는 방법이 있습니다. – JoePasq

2

보기가 숨기거나 표시 할 수있는 하위보기를 가질 수 있음을 잊지 마십시오. 귀하의 경우, 같은 펜촉에 두 방향에 대한 레이아웃을 넣고 -didRotate .. 메시지를 가져올 때 전환합니다.

+0

좋아, 좋은 해결책! 또한 구현하는데 약 5 분이 걸렸습니다. 하나의 새끼 고양이에 그런 것들을 모두 가지고있는 것은 대단히 당황스럽지 않습니다.하지만 대체로 보이는 것보다 훨씬 간단합니다. – Shel

+0

그것은 디스플레이의 측면에서 훌륭하게 작동하지만 각 뷰 (세로보기 및 가로보기)에 중복 된 뷰 UI에 모든 UI 요소를 연결하는 것에 대해서는 확실하지 않습니다. – Shel

0

내가 알고있는 것 중 가장 먼저 발견 한 것은 (알려진 모달 디스플레이 해킹의 부족함) : 모든 것이 탭 바 컨트롤러 내부에서 발생하기 때문에 탭 바 컨트롤러의 viewControllers 속성의 변경 가능한 사본을 잡기 만하면됩니다 해당 배열의 원하는보기 컨트롤러를 NIB에서 초기화 된 새 컨트롤러로 바꾸고 수정 된 배열의 불변 복사본을 탭 표시 줄 컨트롤러의 viewControllers 속성에 다시 넣습니다. 그것은 오른쪽 표시하고 모든 코코아 접선을 유지합니다. 대체보기 제어기의 사본을 캐시하는 것이 쉬워야합니다.

관련 문제