2013-03-25 3 views
2

У меня есть RootViewController, который содержит массив viewControllers, которые включают в себя контроллеры table, view и tabBar ... У некоторых из них есть nib, а некоторые нет, (я сочетаю функциональность нескольких приложений + веб-приложений, созданных в прошлое), но все они работают нормально. Однако у меня есть один проект, в котором используется раскадровка. Я вижу много вопросов, задающих вопрос о создании программного представления из раскадровки, но как насчет другого пути? Как добавить раскадровку в мой программно реализованный контроллер навигации? Возможно ли это? Если нет, то какой лучший способ обхода? Спасибо за ваше время и внимание.Может ли RootViewController создать экземпляр раскадровки?

Вот мой .h код ниже модели:

UIStoryboard *storyBoard; 
UIViewController *storyboardViewController; 

Вот мой .m код, который ломает, где у меня есть шевроны ...

self.viewControllers = [NSMutableArray arrayWithCapacity:self.apps.count]; 

storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 
>>>storyboardViewController = [storyBoard instantiateViewControllerWithIdentifier:@"myViewCont"]; 
[self.viewControllers addObject:storyboardViewController]; 
+1

Это должно быть возможно. Когда вы говорите, что это ломается, что вы имеете в виду? Если вы получаете сообщение об ошибке, опубликуйте его. – rdelmar

+0

"(lldb)" является выходным сообщением ... нет ошибки, просто ломается в этой точке. – Morkrom

+1

Я не вижу ничего плохого в том, что вы опубликовали. Как объявляется storyBoard и storyboardViewController? – rdelmar

ответ

2

Ну это я не простак ...

Я сделал эти три вещи:

изменена:

storyboardViewController = [раскадровке instantiateViewControllerWithIdentifier: @ "myViewCont"];

в

storyboardViewController = [раскадровке instantiateViewControllerWithIdentifier: @ "iPhone"];

enter image description here

enter image description here

Особая благодарность комментатора rdelmar, который упомянул, чтобы проверить расслоение часть этого ответа.

1

2011 WWDC видео на раскадровку иллюстрирует это, ближе к концу сеанса.

Используйте instantiateInitialViewController (или, если вы хотите начать посередине раскадровки, instantiateViewControllerWithIdentifier:).

Вот пример из текущего проекта, который загружает раскадровки в контроллер панели вкладок:

browserStoryboard = [UIStoryboard storyboardWithName:@"ScheduleBrowse_iPhone" bundle:nil]; 
    resultVC = [browserStoryboard instantiateInitialViewController]; 
    UINavigationController *navigationController = (UINavigationController *)resultVC; 
    filterChooserVC = (FilterChooserViewController *)navigationController.topViewController; 
    filterChooserVC.managedObjectContext = self.managedObjectContext; 
    filterChooserVC.kindOfContent = sortMode; 
    filterChooserVC.filterGroup = filterGroup; 
    resultVC.tabBarItem.image = [UIImage imageNamed:@"first"]; 
    resultVC.title = filterGroup.text; 

Возвращение resultVC. В вызывающей процедуре создайте массив программно созданных контроллеров представлений. Тогда

self.tabBarController = [[[UITabBarController alloc] init] autorelease]; 
self.tabBarController.viewControllers = viewControllers; 
self.window.rootViewController = self.tabBarController;