2011-03-23 2 views
2

앱의 한 화면을 다른 화면으로 바꾸고 싶지만 navbar/tabbar 컨트롤러를 사용하지 않으면 창에서 oldViewController.view를 제거하고 newViewController.view를 추가 할 수 있습니다. 그게 다예요, 이제 newViewController는 회전 이벤트 등을 얻을 것입니다.iOS는 어떤보기 컨트롤러가 활성화되어 있어야하는지 어떻게 알 수 있습니까?

UIView는 "컨트롤러"를 참조하지 않으므로 iOS가 newViewController를 활성 상태로 만들어야한다는 것을 어떻게 알 수 있습니까? iOS가 마술을 부리는가? 내부적으로 컨트롤러를보기 또는 무엇으로부터 참조 하는가?

UPDATE :

나는 내가 오해했다 생각 : 나는 어떤 뷰 컨트롤러를 활성 하나를 만드는 방법을 요구하지 않습니다 - 나도 알아. 그냥 궁금 해서요, UIWindow 객체 ([window addSubview : view])에 어떤 뷰를 전달하는 것이 가능한지, 어떻게 뷰가 컨트롤러를 알지 못하더라도 뷰 컨트롤러를 찾습니다.

+0

그렇게 생각합니다. 두 번째보기를 viewcontroller에서 창에 추가하는 경우 회전 이벤트는 첫 번째보기에만 적용되지 않습니다. – Joe

답변

2

불행히도 iOS는 스택의 첫 번째 ViewController에만 이벤트를 보냅니다. 예를 들어 비디오로 다른 사람의 위에 새로운 것을 시도해 볼 수 있습니다. 결코 회전하지 않습니다.

navbar/tabbar 컨트롤러를 사용하지 않는 경우 이벤트가 필요하면 단 하나만 유지하려면 Window에서 매번 추가 및 제거해야합니다.

1

응용 프로그램의 기본 UIWindow 클래스에는 rootViewController 속성에 설정된보기 컨트롤러가 있습니다. 해당 컨트롤러의보기는 앱의 '기본'보기입니다. 이것은 대개 프로젝트의 주 .xib에 설정됩니다. 해당보기 컨트롤러는 "viewDidAppear"또는 "willRotateToInterfaceOrientation"과 같은 일반적인 이벤트를 수신합니다. 원할 경우 자신의 견해를 표시 할 수 있지만 직접 이벤트를 관리해야합니다. 보통 당신은 그렇게하지 않습니다. 당신은 rootViewController로 UINavigationController 나 UITabBarController를 사용하고 새로운 "push"뷰 컨트롤러로 이벤트를 가져 오거나 "presentModalViewController"로 팝업 컨트롤러를 관리 할 수 ​​있습니다.

+1

+1이지만 속성은 SDK 4.0 이후에만 제공됩니다. 기본 UIWindow의 'rootViewController' 속성을 새로운 뷰 컨트롤러에 설정하기 만하면됩니다. 뷰는 "윈도우의 컨텐트 뷰로"(문서에서) 설치됩니다. – Jilouc

+0

rootviewController에 대한 정보 주셔서 감사합니다,하지만 이건 내 질문에 대한 답변이 아닙니다. [window addSubview : view]를하면, rootViewController가 자동으로 설정됩니다. UIWindow 객체는 전달 된 뷰의 뷰 컨트롤러에 대해 아무것도 알지 않아야합니다. 이것이 내면의 마법이거나 내가 이해하지 못하는 것이면 궁금합니다. – broot

3

예 나는 당신과 같은 질문을했습니다. 나는 그것을 알아 냈다.

UIView는 UIResponder에서 파생되었습니다. UIView는 UIResponder :: nextResponder의 하위 클래스 여야합니다.

그것의 기본 구현은

그래서, 결과적으로보기는 컨트롤러를 볼 수 있습니다 (이하지 않았다면, 그것은 슈퍼 볼 것) 뷰의 뷰 컨트롤러를 반환한다. 그것은 창문이 가장보기를 알고 또한

의 컨트롤러를 의미합니다.

행운을 비네.

관련 문제