2013-04-15 4 views
0

사용자 상호 작용에 따라 App Delegate를 사용하는 ViewController를 두 개 가지고 있습니다. AppDelegate.m에서보기 컨트롤러를 전환 할 때 uiview가 중복되었습니다.

나는이 :

- (void) switchViews 
{ 
    if (_viewController.view.superview == nil) { 
     [_window addSubview:_viewController.view]; 
     [_window bringSubviewToFront:_viewController.view]; 
     [viewController2.view removeFromSuperview]; 
    } else 
    { 
     [_window addSubview:_viewController2.view]; 
     [_window bringSubviewToFront:_viewController2.view]; 

     [_viewController.view removeFromSuperview]; 
    } 
} 

_viewController는 기본보기위한 것이며 _viewController2 (나는 isgl3d 사용하고 있습니다) glview입니다. 스위치는 작동하지만 매번 glview로 전환 할 때마다 상단에 복제 된보기가 표시됩니다.이보기는 기본보기조차도 복제됩니다.

이 문제가 없도록 어떻게 내가보기를 완전히 제거 할 수 있습니까? 감사!

+0

루프에서 하위보기를 제거하려고 시도하십시오. http://stackoverflow.com/a/4136925/1011125 – filou

답변

2

이렇게보기를 추가하거나 제거하지 않아야합니다. 어떤 컨트롤러가 윈도우의 루트보기 컨트롤러인지 변경하십시오. 이렇게하면 새 컨트롤러의보기가 창의 하위보기가되고 이전 컨트롤러의보기가 제거됩니다.

if ([self.window.rootViewController isEqual: _viewController]) { 
    self.window.rootViewController = viewController2; 
}else{ 
    self.window.rootViewController = viewController; 
+0

감사! 르 델마. 당신의 방법이 효과가 있습니다. 그러나 나는 다른 방법을 찾아야 해. applicationDidFinishLaunching에서 두 하위 뷰를 모두 추가하면 두 뷰 모두 뷰가 화면에 표시되지만 event는 실행 중입니다. – sooon

+0

@ 오늘, 귀하의 의견을 이해할 수 없습니다. "두 가지 견해가 모두 달리고있다"는 것은 무엇을 의미합니까? – rdelmar

+0

어쩌면 내 질문에 때 viewController2 인스턴스화해야합니까? 현재 내가하는 일은 AppDelegate의 "applicationDidFinishLaunching"에서 두 VC를 모두 인스턴스화하는 것입니다. – sooon

0

스탠포드 코딩과 함께 : IOS를보고 난 후에이 작업을 수행하는 방법을 알았습니다.

내가 알지 못하는 VC의 몇 가지 중요한 정보 : 매번 VC가 인스턴스화하면 viewDidLoad을 한 번 호출하여 콘센트와 같은 중요한 항목을 설정합니다. 그러면 뷰 교환 사이에 viewWillAppearviewWillDisappear이 호출됩니다. 사용자에게보기가 표시되기 전에 잠시 호출되기 때문에보기 방향 및 크기와 같은 모든 형상 설정이 여기에 설정됩니다.

그래서 내가 할 것입니다 : I addSubviewviewDidLoad에서이 viewWillappearviewWillDisappear에서 실행중인 모든 설정을한다.

한 번 더 메모 : 앱이 아직 실행중인 한보기가 그대로 남아 있습니다.

어쨌든 Thanks rdelmar for help.

관련 문제