Перейти к другой раскадровке? - PullRequest
131 голосов
/ 06 марта 2012

Можно ли переходить от одной раскадровки к другой или вставлять раскадровку в контроллер представления в другую раскадровку?Мне нужно поместить UITabBarController в UINavigationController, и я бы хотел, чтобы они были красивыми и отдельными.

Ответы [ 6 ]

200 голосов
/ 08 марта 2012

Да, но вы должны сделать это программно:

// Get the storyboard named secondStoryBoard from the main bundle:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];

// Load the initial view controller from the storyboard.
// Set this by selecting 'Is Initial View Controller' on the appropriate view controller in the storyboard.
UIViewController *theInitialViewController = [secondStoryBoard instantiateInitialViewController];
//
// **OR**  
//
// Load the view controller with the identifier string myTabBar
// Change UIViewController to the appropriate class
UIViewController *theTabBar = (UIViewController *)[secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];

// Then push the new view controller in the usual way:
[self.navigationController pushViewController:theTabBar animated:YES];
114 голосов
/ 17 ноября 2015

Начиная с Xcode 7, вы можете сделать это графически, используя Storyboard Reference:

reference

Добавить Storyboard Reference к вашей раскадровке.Создайте переход между ViewController и Storyboard Reference (ctrl + drag)

Затем заполните эти поля.

enter image description here

Где "Tutorial" - это "Файл Tutorial.storyboard »и« MainTutorialController »- это ваше поле« Storyboard ID »в ViewControllerSettings

10 голосов
/ 12 марта 2012

Вы не можете делать сегменты вручную, потому что UIStoryboardSegue является абстрактным классом.Вам нужно создать подкласс и реализовать perform, чтобы он что-то делал.Они действительно предназначены для создания раскадровок.Вы можете нажать контроллер представления вручную, что является хорошим решением.Ответ lnafziger делает это хорошо:

UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
[self.navigationController pushViewController:theTabBar animated:YES];

Однако следует отметить, что вы сказали, что хотите, чтобы все было хорошо и обособленно.Идея раскадровки состоит в том, чтобы вы могли разделить вещи, выполняя все свои дизайнерские работы в одном месте.Каждый контроллер представления хорош и отделен в раскадровке от других.Вся идея состоит в том, чтобы держать все это в одном местеПросто выложите это красиво, чтобы оно было организовано, и вам будет хорошо идти.Вы не должны отделять это, если у вас нет действительно веской причины для этого.

7 голосов
/ 14 марта 2012

Вы не должны помещать UITabBarControllers в UINavigationController. Он запрашивает ошибки, такие как неправильная автоповорот / выгрузка представления и т. Д., Так как Apple не поддерживает такого рода ограничения:

Однако при объединении контроллеров представления важен порядок локализации; действительны только определенные договоренности. Порядок содержания от ребенка к родителю выглядит следующим образом:

  • Контроллеры представления содержимого и контроллеры представления контейнера с гибкими границами (например, контроллер представления страницы)
  • Контроллер навигационного вида
  • Контроллер табуляции
  • Контроллер с разделенным видом
4 голосов
/ 12 марта 2016

Вот быстрая версия:

let targetStoryboardName = "Main"
let targetStoryboard = UIStoryboard(name: targetStoryboardName, bundle: nil)
if let targetViewController = targetStoryboard.instantiateInitialViewController() {
    self.navigationController?.pushViewController(targetViewController, animated: true)
}
0 голосов
/ 15 марта 2012

Вы пробовали следующее:

2 / нажмите, чтобы выбрать контроллер представления, который связан с вашим контроллером навигации и в верхнем меню: редактор -> встроить -> контроллер панели вкладок

Примечание: я не проверял это, потому что я использую противоположное: создание приложений панели вкладок и размещение контроллера навигации внутри).

...