Можно ли переходить от одной раскадровки к другой или вставлять раскадровку в контроллер представления в другую раскадровку? Мне нужно поместить UITabBarController
в UINavigationController
, и я хотел бы, чтобы они были красивыми и отдельными.
Можно ли переходить от одной раскадровки к другой или вставлять раскадровку в контроллер представления в другую раскадровку? Мне нужно поместить UITabBarController
в UINavigationController
, и я хотел бы, чтобы они были красивыми и отдельными.
Ответы:
Да, но вы должны сделать это программно:
// 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];
Начиная с Xcode 7, вы можете сделать это графически с помощью Storyboard Reference:
Добавьте ссылку на раскадровку на свою раскадровку. Создать переход между ViewController и Storyboard Reference (Ctrl + перетаскивание)
Затем заполните эти поля.
Где "Tutorial" - это файл "Tutorial.storyboard", а "MainTutorialController" - это ваше поле "Storyboard ID" в ViewControllerSettings
Вы не можете делать сегменты вручную, потому что UIStoryboardSegue является абстрактным классом. Вам нужно создать его подкласс и реализовать perform
для того, чтобы он что-то делал. Они действительно предназначены для создания раскадровок. Вы можете нажать контроллер представления вручную, что является хорошим решением. Ответ lnafziger делает это хорошо:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
[self.navigationController pushViewController:theTabBar animated:YES];
Однако следует отметить, что вы сказали, что хотите, чтобы все было хорошо и обособленно. Идея раскадровки состоит в том, чтобы вы могли держать вещи отдельно, одновременно выполняя все свои дизайнерские работы в одном месте. Каждый контроллер представления хорош и отделен в раскадровке от других. Вся идея состоит в том, чтобы держать все это в одном месте. Просто выложите это красиво, чтобы оно было организовано, и вам будет хорошо идти. Вы не должны отделять это, если у вас нет действительно веской причины для этого.
Вы не должны помещать UITabBarControllers в UINavigationController. Он запрашивает ошибки, такие как неправильная автоповорот / выгрузка представления и т. Д., Так как Apple не поддерживает такого рода ограничения:
Однако при объединении контроллеров представления важен порядок локализации; действительны только определенные договоренности. Порядок содержания от ребенка к родителю выглядит следующим образом:
- Контроллеры представления содержимого и контроллеры представления контейнера, имеющие гибкие границы (например, контроллер представления страницы)
- Контроллер навигационного представления
- Контроллер панели вкладок
- Контроллер с разделенным видом
Вот быстрая версия:
let targetStoryboardName = "Main"
let targetStoryboard = UIStoryboard(name: targetStoryboardName, bundle: nil)
if let targetViewController = targetStoryboard.instantiateInitialViewController() {
self.navigationController?.pushViewController(targetViewController, animated: true)
}
Вы пробовали следующее:
2 / нажмите, чтобы выбрать контроллер представления, который связан с вашим контроллером навигации и в верхнем меню: редактор -> встроить -> контроллер панели вкладок
Примечание: я не проверял это, потому что я использую противоположное: создание приложений панели вкладок и размещение контроллера навигации внутри).