2011-04-20 4 views
0

rootViewController를 전달하기 위해 UINavigationController의 생성자를 어떻게 재정의 할 수 있습니까? Monotouch : UINavigationController, override initWithRootViewController

-(id)initWithRootViewController:(UIViewController*)rootViewController 
{ 
    UIViewController *fakeController = [[[UIViewController alloc] init] autorelease]; 
    if (self = [super initWithRootViewController:fakeController]) { 

     self.fakeRootViewController = fakeController; 

     rootViewController.navigationItem.hidesBackButton = YES; 

     [self pushViewController:rootViewController animated:NO]; 
    } 
    return self; 
} 

가 사전에 감사합니다

는 내가 목표 - C에서 다음과 같은 방법을 것이다. 문안 인사.

P.S는이 코드 조각은 Change the root view controller

편집에서 촬영되었습니다 :

귀하의 답변 주셔서 감사합니다. 특히 흥미로운 코드이기 때문에 이전 코드 스 니펫에 관심이있었습니다.

@Geoff 노턴 : 어쩌면 내가 당신의 솔루션을 사용하지 않을거야하지만 난 그게 놀라운 어쨌든 ...

내 시도가 템플릿 역할을 UINavigationViewController의 종류를 만드는 것입니다 찾을 수 있습니다. 특히, UINavigationController는 초기에 loginView (일종의 rootviewcontroller가 될 수 있음)를 가지고 있습니다. 그런 다음 로그인 할 때 주보기와 보조보기의 두 가지 유형의보기를 가질 수 있습니다. 전자는 로그인보기와 같은 수준입니다 (일종의 rootviewcontroller가 될 수 있습니다). 후자는 첫 번째 것 위로 밀려 나옵니다. 일반적인 UInavigationController 스택을 탐색하거나 도구 모음을 통해 탐색 할 수 있습니다. 도구 모음은 기본보기 만로드합니다.

UINavigationController로이 작업을 수행 할 수 있습니까?

다시 한 번 감사드립니다. 문안 인사.

답변

4

가능한 일이지만 가능하면 안됩니다. 에 가까운

public YourNavController : UINavigationController { 
    [Export ("initWithRootViewController:")] 
    public YourNavController (UIViewController vc) { 
     UIViewController fc = new UIViewController(); 
     Handle = Messaging.intptr_objc_msgSend_intptr (this.Handle, Selector.GetHandle ("initWithRootViewController:"), fc.Handle); 
     FakeRootViewController = fc; 
     vc.NavigationItem.HidesBackButton = true; 
     PushViewController (vc, false); 
    } 
} 

뭔가 작동합니다 : 당신이이 일을 주장하는 경우 애플에 따르면 UINavigationController가이 "not designed for subclassing".입니다.

2

Geoff Norton이 지적한 것처럼 UINavigationController를 서브 클래 싱하지 않아도됩니다.

나는 논리적 인 설명이없는 한 번씩 팝업되는 버그가 있음을 알기 위해 몇 번이나이 문제를 스스로 고집했습니다. 당신이 그것들을 구글로 올리면 대답은 "당신은 UINavigationController를 하위 클래스 화해서는 안된다"라는 것이다.