2011-05-11 2 views
2

2 개의 UIViewController 클래스간에 프로그래밍 방식으로 전환하고 싶습니다. UI를 응용 프로그램에 추가하는 UITabBarController와 같은 추가 UI 컨트롤을 사용하지 않아도됩니다.UI 탐색기 컨트롤없이 uiviewcontroller 사이를 전환

내 메인은 addSubView가있는 첫 번째보기 컨트롤러를로드합니다.

vc1 = new viewc1(); 
    window.AddSubview(vc1.View); 
    window.MakeKeyAndVisible();  

나는 PresentModalViewController

vc2 = new viewc2(); 
    PresentModalViewController(vc2, true); 

로 처음부터 내 두 번째의 ViewController을로드 할 수 있습니다하지만 난 앞뒤로 전환하고, 메모리를 절약하기 위해 기존의 viewControllers을 해제해야합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? DismissModalViewControllerAnimated (false); 두 번째보기 컨트롤러에서 메모리를 공개하지 않습니다 그리고 난 모달 "창"을 원하지 않는다. 탭바 콘트롤러가 필요 없도록 커스텀 UI를 가지고 있습니다.

답변

3

간단한 코드로 입력 할 수 있습니다. 그러나 단추 콘트롤과 같은 사용자 상호 작용을 처리하는 데 필요한대로보기 콘트롤러를 해제 할 수는 없습니다. 창에보기를 추가하면보기 인스턴스 만 보존됩니다. 보기 컨트롤러 인스턴스를 해제하면 잘못된 액세스 오류 또는 인식 할 수없는 선택기 오류가 발생할 수 있습니다.

그래서 ... 희망이 도움이

if(vc1==nil) 
    vc1 = new viewC1(); 
window.addSubView(vc1.view); 
window.MakeKeyAndVisible(); 

그리고 스위치 코드가 될 것입니다이

if(vc2==nil) 
    vc2 = new viewC2(); 
if(vc1.view.superview!=nil){ 
    vc1.view.removefromSuperView(); 
    window.addsubview(vc2.view); 
} else { 
    vc2.view.removeFromSuperView(); 
    window.addsubview(vc1.view); 
} 

지금의 dealloc 방법에

vc1.release(); 
vc2.release(); 

그게 전부를 추가하려면 주요 코드가하자 ... 방금 ​​구문을 따랐습니다

+0

감사합니다. 나는'code var appDelegate = (AppDelegate) UIApplication.SharedApplication.Delegate;를 사용했다. appDelegate.switch(); \t 코드'보기 컨트롤러에서 내 애플 대리인 코드를 호출합니다. net() GC 때문에 release()가 필요없는 것 같습니다. 좋은 점은 –

0

여전히 UINavigationController을 사용할 수 있습니다. 제공하는 추가 UI는 필요하지 않습니다. 를 사용할 수 있습니다. Hidden 속성을 숨기려면 UINavigationBar. 보기간에 전환하려면 PushViewController(controller, animated)을 사용하여 새보기를 푸시 할 수 있습니다. 당신은 기존의 컨트롤러를 해제하려는 경우, 당신은 사용 UINavigationController.ViewControllers 속성을 설정할 수 있습니다 :

navigationController.ViewControllers = new UIViewController[1]{ vc2 }; 

이 첫 번째 컨트롤러의 참조를 제거하고 두 번째 컨트롤러를 루트를 만들 것입니다. (이것도 주위에 다른 방법으로 작동합니다!)

+0

입니다. UI가 숨겨진 채로 메인 윈도우에 직접 추가하는 것보다 훨씬 더 무거운 구성 요소입니다. –