Monotouch: UINavigationController, переопределить initWithRootViewController

Как можно переопределить конструктор для UINavigationController для передачи в rootViewController?

В Objective-C у меня будет такой метод, как:

-(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;
}

Спасибо заранее. С наилучшими пожеланиями.

P.S Этот фрагмент кода был взят из Изменить контроллер корневого представления

EDIT:

Спасибо за ваши ответы. Меня интересовал предыдущий фрагмент кода, потому что он интересен.

@Geoff Norton: Может быть, я никогда не буду использовать ваше решение, но я все равно считаю это удивительным...

Моя попытка создать своего рода UINavigationViewController, который действует как шаблон. В частности, UINavigationController изначально имеет loginView (это может быть своего рода rootviewcontroller). Затем при входе в систему я мог бы иметь два типа просмотров: основной и вторичный. Первые находятся на уровне входа в систему (они могут быть своего рода rootviewcontrollers). Последние проталкиваются выше первых. Вы можете перемещаться по обычным стекам UInavigationController или с помощью панели инструментов. Панель инструментов загружает только основной вид.

Можно ли сделать это с помощью UINavigationController?

Еще раз спасибо. С наилучшими пожеланиями.

Ответ 1

Это возможно, но вы не должны этого делать. Согласно Apple, UINavigationController "не предназначен для подкласса" . Если вы настаиваете на этом:

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);
    }
}

Что-то близко к этому должно работать.

Ответ 2

Как указал Джефф Нортон, вы не должны подклассифицировать UINavigationController.

Я настаивал на том, чтобы делать это сам несколько раз, просто чтобы узнать, что появляются ошибки, которые появляются раз в то время, которые не имеют логического объяснения. Когда вы заходите в Google, ответ остается неизменным: "Вы не должны подклассифицировать UINavigationController".