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