iPhone UIStoryBoard възможно ли е програмно създаване на контролер с интерфейс, дефиниран в разкадровка?

Имам куп контролери за изглед, дефинирани в рамките на UIStoryBoard. Харесва ми да ги имам всички на едно място за лесен достъп. Въпреки това се натъкнах на проблем, при който трябва да инстанцирам копие на контролер за изглед на друго място в приложението. Възможно ли е програмно да се създаде UIViewController, като се използва интерфейсът за него, който е дефиниран в сценария?

В противен случай ще трябва да копирам изгледа на сценария за този контролер в отделен .xib файл и да заредя изгледа ръчно.

Благодаря за разяснението!


person Alex Stone    schedule 24.04.2012    source източник


Отговори (1)


Да, и изобщо не е лошо! -instantiateInitialViewController е това, което търсите.

Помощник, който използвам, е:

- (void) loadStoryboard:(NSString *)storyboardName animated:(BOOL)animated
{
  if ([_currentStoryboard isEqual:storyboardName])
  {
    return;
  }

  _currentStoryboard = storyboardName;

  UIStoryboard* storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil];
  UIViewController* newRootController = [storyboard instantiateInitialViewController];

  if (!animated)
  {
    self.window.rootViewController = rootController;
    return;
  }

  newRootController.view.alpha = 0.0;
  [self.window addSubview:newRootController.view];

  [UIView animateWithDuration:0.5 animations:^{
    newRootController.view.alpha = 1.0;
  } completion:^(BOOL finished) {
    self.window.rootViewController = newRootController;
  }];
}

Този вариант е настроен за сметището, което е вашият AppDelegate - все пак трябва лесно да се адаптира към повечето ситуации.

person Nevir    schedule 24.04.2012
comment
Търсех да заредя конкретен контролер за изглед, дефиниран в сценария, а не първоначален. Възможно ли е това? - person Alex Stone; 25.04.2012
comment
Да, другият метод в UIStoryboard, който може да ви помогне, е - (id)instantiateViewControllerWithIdentifier:(NSString *)identifier. Все пак може да искате да обмислите разделянето на нещата в множество сценарии (ако има смисъл във вашия контекст) - досега този модел беше наистина полезен за моите проекти - person Nevir; 25.04.2012