Чи можливо перенести з однієї розкадрування на іншу або вставити розкадровку в контролер перегляду в іншу дошку? Мені потрібно помістити 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, ви можете це зробити графічно, використовуючи довідку із розгортки:
Додайте посилання на аркуші розкадрування до вашої розкадровки. Створіть виразку між ViewController та довідковою сторінкою (ctrl + перетягування)
Потім заповніть ці поля.
Якщо "Підручник" - це файл "Tutorial.storyboard", а "MainTutorialController" - це ваше поле "Ідентифікатор розгортки" у 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 / клацніть, щоб вибрати контролер перегляду, який пов'язаний з вашим контролером навігації та у верхньому меню: редактор -> вбудований -> контролер панелі вкладок
Примітка. Я не перевіряв це, оскільки використовую протилежне: створення додатків для вкладок та додавання навігаційного контролера всередину.