Перемістіть або скопіюйте контролер перегляду з однієї розкадровки на іншу


79

У мене кілька UIViewControllersв одній Раскадровці. Тепер я хочу перенести деякі UIViewControllersна іншу розкадрування. Це можливо?


Відповіді:


153

Так, це можливо.

  1. Виберіть контролери, які потрібно скопіювати
  2. Натисніть Command+C
  3. Відкрийте другий файл розкадровки
  4. Натисніть Command+V

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


1
Це чудово. У мене виникали проблеми, коли я вручну скопіював свій Storyboard у Finder, скопіювавши його зі зразкового проекту Apple у свій власний проект. Проблеми зникли, коли я створив раскадровку в цільовому проекті, а потім скопіював та вставив вміст. Дивно.
— Vern Jensen,

1
Це робоче рішення @Fady Kamal. Іноді це працює не з першого разу - це залежить від того, де основна увага приділяється X-Code.
— new2ios

2
Гаразд, @Rahul, але що відбувається з торговими точками - чи правильно вони встановлені, чи я повинен зв’язувати їх з ними?
— new2ios

1
Ви також можете спробувати скопіювати. Command + D або Edit-Duplicate зробить магію!
— AG

1
Підтверджено, що все ще працює в Xcode 8.3.2. IBOutlets, IBActions, ідентифікатори раскадровки, сеґи все скопійовано ідеально. Хоча я не зламав жодної категорії, це означає, що я не видалив контролер перегляду в кінці серії і не помістив його в іншу розкадрування. Я копіював сегменти, але лише там, де скопіював контролер подання джерела та контролера перегляду призначення та перемістив їх до нової розкадровки
— MikeG,

37

Можна скопіювати, але ви повинні відкрити обидва розкадрування одночасно в одному проекті, а потім скопіювати та вставити.


10
Це насправді вирішує мою проблему. ОБИЙ раскадровки слід відкривати за допомогою помічника редактора! Дякую!
— Чень Лі Йонг

35

У Xcode 8, якщо конкретно ви хочете перенести контролери перегляду на іншу розкадрування, просто виберіть контролери (-и) перегляду, які ви хочете перемістити за допомогою Cmd + клацніть контролер перегляду. Зберігаючи їх виділеними, перейдіть на вкладку Редактор та виберіть Рефактор для розкадрування. Він запитає вас у назві нового файлу розкадровки та натисне Enter.

Буде створено новий файл розкадровки з вибраними вами контролерами перегляду. На Main.storyboard ви побачите об'єкт "Довідковий матеріал" замість цього контролера перегляду, який є вашим посиланням на нову розкадрування, яку ви щойно зробили.


Це надзвичайно корисно. Він зберігає всі існуючі стосунки та думки, на відміну від інших методів.
— Hobo Joe

Але ви не можете перетворити на існуючий раскадровки?
— Девід

6

Копіювання-вставка (Command + C, Command + V) працює нормально, але пам’ятайте, що потрібно вирішувати підключення до розетки, оскільки Xcode, схоже, зберігає вихідні підключення: закрийте / повторно відкрийте проект, видаліть те, що неправильно, і відновіть відсутні зв’язки.


2

Можна скопіювати / вставити, але це працює, лише якщо ви обидві Раскадровки відкриті поруч, за допомогою редактора помічника Xcode.


1

Якщо використання Cut-n-Paste не вдається вам, є обхідне рішення. Вставити не вдасться, якщо тепер у файлі, що вставляється, є ViewController. Це унеможливлює вибір розкадрування для вставки. XCode відмовиться вставляти. Отже, вам потрібно спочатку перетягнути порожній контролер подання в розкадрування з бібліотеки. Потім виберіть цей viewController на розкадруванні, і тоді вставка працюватиме. Після закінчення вставки ви можете видалити фіктивний viewController. Вам це більше не знадобиться.


0

Елементи інтерфейсу можна переміщати між файлами Xib та Storyboard за допомогою функції Copy / Paste .

Спочатку це не працювало для мене. Я намагався скопіювати UICollectionViewCell із виділеного Xib на нашу головну сторінку розкадрувань. Клітина не копіюється в Раскадровку.

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

Якщо у вас виникають проблеми з вставкою певного елемента, переконайтеся, що перед перевіркою перевірте, чи вибрали ви дійсний батьківський елемент, перш ніж намагатись вставити.


0

Я зіткнувся з подібною ситуацією, коли в моїй Головній розкадровці у мене занадто багато сцен і мені потрібно зробити рефакторинг. Ідея, яка була у мене на початку, полягала в тому, щоб позначити кілька і зробити копіювальну вставку, як пропонували багато хто. Однак мене хвилювало будь-яке вирішення підключень сторибордів до коду контролерів перегляду. Після довгих пошуків я виявив, що з iOS 9 є нова функція, доступна для "Refactor to Storuboard". Ви можете позначити кілька сцен у своїй вихідній розкадровці, і ви можете вибрати цей параметр у меню Редактор. Потім усі вибрані сцени витягуються із вашої старої розкадровки, створюється нова розкадровка, а також посилання на неї в старій / основній розкадровці. Корисними загальними порадами є: 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

Я сподіваюся, що ця нова офіційна функція рефакторингу розкадровки може забезпечити краще рішення такого роду проблем.


-2

Я думаю, що це можливо ....

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

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

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

я маю на увазі переміщення сцени контролера перегляду між раскадровками в xcode
— Володимир Березкін

Питання полягало в переміщенні / копіюванні VC в Storyboard. Я не думаю, що ваша відповідь де-небудь вирішує цю проблему.
— Alix
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.