Можно ли переходить от одного раскадровки к другому или встраивать раскадровку в контроллер просмотра в другой раскадровки? Мне нужно разместить UITabBarController
в UINavigationController
, и я хотел бы сохранить их красивыми и раздельными.Segue в другой раскадровки?
ответ
Да, но вы должны сделать это программно:
// 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];
Я просто очень хочу держать раскадровки раздельными; они уже слишком захламлены. – Ryan
Как и главы в книге, я вижу необходимость в нескольких раскадках. – finneycanhelp
Когда у вас несколько разработчиков, работающих с одним и тем же приложением, становится очень полезно иметь несколько раскадровки, потому что разрешение конфликтов управления версиями в xml-файле раскадровки довольно болезненно. – Lee
Вы не можете действительно сделать перетекает вручную, поскольку UIStoryboardSegue является абстрактным классом. Вам нужно подклассифицировать его и реализовать perform
, чтобы он мог что-либо сделать. Они действительно предназначены для создания в раскадровки. Вы можете нажать контроллер вида вручную, хотя это хорошее решение. Ответ lnafziger в делает это хорошо:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
[self.navigationController pushViewController:theTabBar animated:YES];
Одна вещь отметить, однако, является то, что вы сказали, что вы хотите, чтобы держать вещи красиво и отдельно. Идея раскадровки заключается в том, чтобы позволить вам держать вещи в стороне, выполняя всю свою дизайнерскую работу в одном месте. Каждый контроллер просмотра хорош и разделен внутри раскадровки от других. Вся идея состоит в том, чтобы держать все это в одном месте. Просто выложите его так, чтобы он был организован, и вам будет хорошо идти. Вы не должны отделять его, если у вас нет действительно веских оснований для этого.
слияние раскадровки не очень хорошо работает, поэтому в среде с несколькими разработчиками может быть интересно использовать отдельные раскадровки. Кроме того, производительность может стать довольно плохим в крупных проектах с помощью одного раскадровки. – calimarkus
Мы используем несколько раскадровки, но дело в том, что вы не можете это сделать и переходите между ними. Apple разработала его, чтобы вы могли делать все в одном месте, поэтому идея вроде бы использует только одну (а не то, что вы не можете). Производительность не должна быть проблемой. Раскадровка скомпилирована в отдельные файлы nib для каждого контроллера представления. Вы должны получить очень хорошую производительность от раскадровки. Производительность будет такой же хорошей, как если бы у вас были отдельные xib для каждого контроллера вида. – wbyoung
В моем случае проблема с производительностью обычно находится в Xcode ... Текущая реализация Apple в редакторе раскадровки невелика. – Adam
Вы не должны размещать UITabBarControllers в UINavigationController. Он просит ошибок, таких как неверный авторотации/вид разгрузки и т.д., так как Apple, doesn't support такого рода сдерживания:
When combining view controllers, however, the order of containment is important; only certain arrangements are valid. The order of containment, from child to parent, is as follows:
- Content view controllers, and container view controllers that have flexible bounds (such as the page view controller)
- Navigation view controller
- Tab bar controller
- Split view controller
Я полностью согласен и по нескольким причинам. Помещение TabBarController внутри NavigationController не является хорошей идеей, потому что делегаты не будут правильно запускать просмотры, содержащиеся в них, и у конечного пользователя будет страшное время для навигации по интерфейсу. Им было бы трудно вернуться к контроллеру, который выводит интерфейс TabBar/Navigation. С другой стороны, в порядке, A NavigationController внутри TabBarController. Всегда лучше не путать конечного пользователя и слушать предложения Яблока! –
И все же родное приложение для iPhone iPhone делает именно это (часть «Now Playing»). –
FYI: приложение для iPhone не имеет TabbarController на экране «Сейчас играет». – sanjana
вы попробуйте следующее:
2/выберите ваш контроллер представления, который связан к вашему контроллеру навигации и в верхнем меню: editor -> embed in -> Контроллер панели таблеток
Примечание: я не тестировал его, потому что я использую противоположное: создание приложений с вкладками и включение контроллера навигации внутри).
От Xcode 7 и далее, вы можете сделать это графически с помощью раскадровки Reference:
Добавить раскадровки Ссылка на раскадровку. Создайте segue между ViewController и Storyboard Reference (ctrl + drag)
Затем заполните эти поля.
Где "Учебное пособие" является файл "Tutorial.storyboard" и "MainTutorialController" ваше поле "Раскадровка ID" в ViewControllerSettings
Вот быстры версия:
let targetStoryboardName = "Main"
let targetStoryboard = UIStoryboard(name: targetStoryboardName, bundle: nil)
if let targetViewController = targetStoryboard.instantiateInitialViewController() {
self.navigationController?.pushViewController(targetViewController, animated: true)
}
- 1. Push segue с раскадровки
- 2. Как заблокировать раскадровки SEGUE
- 3. Segue к другому раскадровки
- 4. Условный Segue Использование раскадровки
- 5. Segue для viewcontroller в другой раскадровки без навигационного контроллера
- 6. Выполнение segue после успешного входа в раскадровки
- 7. Сторнирование пользовательского Segue с раскадровки
- 8. Segue от раскадровки до XIB
- 9. iOS7 segue без использования раскадровки
- 10. iOS раскадровки segue push not working
- 11. Segue из одной раскадровки в другую раскадровку?
- 12. Отвяжите segue в нескольких средах раскадровки
- 13. Перетащите Segue To Self в раскадровки
- 14. Изменить анимацию segue без использования раскадровки?
- 15. Segue между UIViewControllers без раскадровки OR XIB
- 16. Дисплей ABPeoplePickerNavigationController с помощью раскадровки segue
- 17. ios - раскадровки custom segue if/else?
- 18. Изменить конечную точку segue с помощью раскадровки
- 19. Настоящий ViewController Segue Transition без раскадровки [Swift]
- 20. Swift - Expand TableView без раскадровки Segue
- 21. Segue от xib до раскадровки цель-C
- 22. Универсальная мастер-справка раскадровки на segue
- 23. Дисплей Pageviewcontroller с помощью раскадровки SEGUE
- 24. Swift предотвратить раскадровки SEGUE от случаться
- 25. Uncaught Ошибка на раскадровки Trigger Segue
- 26. Custom segue crashing (второй) iPad раскадровки
- 27. ИОС навигации стека с использованием раскадровки SEGUE
- 28. Переход Анимация без раскадровки segue swift
- 29. Как выполнить пользовательский segue через две раскадровки?
- 30. Segue к контроллеру UINavigation программно без раскадровки
Посмотрите на этот ответ http://stackoverflow.com/a/19702425/317928 – vokilam
Отличный вопрос. Наличие одного раскадровки - это кошмар для командных проектов. Мы регулярно разбиваем проекты на раскадровки с помощью «потока» (один раскадровки для входа в систему, один раскадровки для ленты новостей и связанных экранов и т. Д.). Это помогает минимизировать количество конфликтов слияния, которые в противном случае возникали бы каждый раз, когда разработчик касается раскадровки. –
@BrianSachetta Что еще вы делаете? Любые другие хорошие аналогичные советы? – Honey