Monotouch: UINavigationController, переопределить initWithRootViewController - PullRequest
0 голосов
/ 20 апреля 2011

Как можно переопределить конструктор для 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:

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

@ Джефф Нортон: Возможно, я никогда не буду использовать ваше решение, но я все равно нахожу его удивительным ...

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

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

Еще раз спасибо. С уважением.

Ответы [ 2 ]

4 голосов
/ 20 апреля 2011

Это возможно, но вы не должны этого делать.Согласно 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 голосов
/ 21 апреля 2011

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

Я настаивал на том, чтобы сделать это сам несколько раз, просто чтобы обнаружить, что периодически появляются ошибкиэто не имеет логического объяснения.Когда вы гуглите их, ответ неизменно будет «У вас не должно быть подкласса UINavigationController».

...