Перемещение или копирование контроллера вида с одной раскадровки на другую


у меня есть несколько UIViewControllers в одной раскадровке. Теперь я хочу переместить некоторые UIViewControllers в другой раскадровке. Возможно ли это?

9 62

9 ответов:

Да, это возможно.

  1. выберите контроллеры, которые вы хотите скопировать
  2. пресс команда + C
  3. откройте второй файл storyboard
  4. пресс команда + V

Примечание: "IBOutlets остается как есть после копирования (проверено на Xcode 6.3.2)."

можно скопировать, но вы должны открыть оба образа одновременно в одном проекте, а затем скопировать и вставить.

в Xcode 8, Если вы хотите переместить контроллеры вида на другую раскадровку, просто выберите контроллер(ы) вида, который вы хотите переместить с помощью Cmd + нажмите на контроллер вида. Сохраняя их выбранными, перейдите на вкладку редактор и выберите рефакторинг в раскадровку. Он спросит вас имя нового файла раскадровки и нажмите Enter.

новый файл раскадровки будет создан с выбранными контроллерами вида в нем. в основном.раскадровка, вы увидите ссылку раскадровки объект вместо этого контроллера вида, который является вашей ссылкой на новую раскадровку, которую вы только что сделали.

Copy-paste (Command+C, Command+V) работает нормально, но не забудьте Разрешить подключения к розетке, потому что Xcode, похоже, сохраняет исходные соединения: закрыть/снова открыть проект, удалить то, что не так, и восстановить отсутствующие соединения.

его можно скопировать / вставить, но это работает только если у вас есть обе раскадровки открыты бок о бок с помощью Xcodes Assistant Editor.

элементы интерфейса можно перемещать между файлами Xib и раскадровки через Копировать / Вставить.

Это изначально не работало для меня. Я пытался скопировать UICollectionViewCell из выделенного Xib в нашу основную раскадровку. Ячейка не будет копировать в раскадровку.

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

Если у вас возникли проблемы с вставкой определенного элемента, не забудьте дважды проверить, что вы выбрали действующий родительский элемент перед попыткой вставить.

Если использование Cut-n-Paste не удается для вас, есть обходной путь. Вставить не удастся, если в вставляемом файле теперь есть ViewController. Это делает невозможным выбор раскадровки для вставки. В Xcode отказывается вставлять. Поэтому вам нужно сначала перетащить пустой контроллер вида в раскадровку из библиотеки. Затем выберите этот viewController в раскадровке, а затем вставить будет работать. После завершения вставки вы можете удалить фиктивный viewController. Вы не нужно еще раз.

Я пришел к аналогичной ситуации, когда в моей основной раскадровке у меня слишком много сцен и нужно рефакторинг. Идея, которую я имел в начале, состояла в том, чтобы отметить несколько и сделать copy paste, как предлагали многие. Тем не менее, я был обеспокоен любым разрешением соединений раскадровки с кодом контроллеров вида. После долгих поисков я обнаружил, что с iOS 9 появилась новая функция, доступная для "рефакторинга на Storuboard". Вы можете отметить несколько сцен в исходном раскадровке, и вы можете выберите в меню редактор этот параметр. Затем все выбранные сцены извлекаются из старой раскадровки, создается новая раскадровка, а также ссылка на нее в старой/главной раскадровке. Полезные totorials являются: https://code.tutsplus.com/tutorials/ios-9-staying-organized-with-storyboard-references--cms-24226 https://www.raywenderlich.com/115697/ios-9-storyboards-tutorial-whats-new-in-storyboards

надеюсь, что это новая официальная раскадровка функциональность рефакторинга может обеспечить лучшее решение такого рода проблем.

Я думаю, что это возможно....

UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];

UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];

[self.navigationController pushViewController:theTabBar animated:YES];