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


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.