Универсальная раскадровка?

В старом мире разработки XIB для iOS я смог создать один View Controller и один XIB и использовать их как для iPhone, так и для iPad. С помощью всего лишь нескольких изменений кода XIB можно было изменить в размере и настроить в соответствии с различными размерами и соотношениями сторон. Это позволило мне снизить риск рассинхронизации двух макетов с течением времени.

Возможно ли то же самое в мире раскадровок? По умолчанию Xcode создает две отдельные раскадровки для моего универсального приложения — одну для iPhone и одну для iPad.

Как я могу использовать одну раскадровку для обоих?

Спасибо!

Обновлено:

Классы размера в Xcode 6 по существу достигают цели универсальных раскадровок. Подробнее здесь:

https://developer.apple.com/library/prerelease/ios/documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_6_0.html


person Axeva    schedule 06.10.2013    source источник
comment
Возможно, вы захотите добавить некоторые подробности о том, какой интерфейс вы будете использовать. Если это мастер-деталь, вам может быть проще придерживаться двух раскадровок (или вообще удалить раскадровки).   -  person Wain    schedule 06.10.2013
comment
Он основан на навигационном контроллере. Полный экран, а не Master/Detail.   -  person Axeva    schedule 06.10.2013


Ответы (2)


Короче... нельзя.

Есть обходной путь, который я использую для создания раскадровки iPad в конце разработки iPhone.

Вы должны найти раскадровку iPhone и с помощью Терминала вы можете продублировать ее, дав ей имя раскадровки iPad, которую Xcode создал для вас. Удалите пустую старую раскадровку и откройте вновь скопированную, изменив атрибут targetRuntime на «iOS.CocoaTouch.iPad» вместо старого значения «iOS.CocoaTouch».

Откройте раскадровку iPad с помощью Xcode, все там есть, но его все еще нужно упорядочить и подключить к ViewController (включая проводку ..). Это не идеально, но я обычно делаю это, чтобы сэкономить подверженное ошибкам копирование и вставку (и несколько часов).

Если вы просто хотите настроить таргетинг своего приложения для iPhone и доставить его на iPad, вы можете просто использовать iPhone Xib, и вы получите двойную маленькую кнопку в правом углу.

Обновление в конце 2014 г. (после бета-версии Xcode 6)

Xcode 6 теперь позволяет вам определять одну раскадровку и через концепция классов размера, чтобы адаптировать его ко всем устройствам. Это решение немного сбивает с толку (особенно если вы знакомы с тем, как эта проблема решается в среде Android), но, ИМХО, это что-то в правильном направлении.

person elbuild    schedule 06.10.2013
comment
вы не можете [нужна цитата] - person Nikolai Ruhe; 06.10.2013
comment
Xcode 6 имеет универсальные раскадровки. Извините, я не посмотрел на дату ОП перед голосованием против. Я не могу удалить свой голос, поэтому я изменю его на голосование "за". - person jj0b; 17.09.2014
comment
Без проблем. Спасибо за голосование, я отредактировал свой ответ. Я также использую Xcode 6, хотя мне все еще неясно, укусит ли меня в сложном сценарии вещь с классами размеров позже из-за отсутствия удобства обслуживания и гибкости (клиенты так часто меняют свое мнение...). - person elbuild; 17.09.2014

Да, ты можешь. Вы можете просто выбрать ту же раскадровку в Xcode в разделе «Общая информация/информация о развертывании».

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

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
       [self performSegueWithIdentifier:@"Open VC" sender:sender];
} else {
       [self performSegueWithIdentifier:@"Open VC iPad" sender:sender];
}

Единственным недостатком является то, что вы не можете использовать специальные элементы управления iPad непосредственно из раскадровки (всплывающее окно и т. д.), если вы не переключитесь на раскадровку iPad.

person Tibidabo    schedule 17.02.2014
comment
Когда вы используете раскадровку iPad как для iPhone, так и для iPad, вы можете использовать всплывающее окно, форму и т. д. - person Rudolf Adamkovič; 03.04.2014
comment
И это легко обойти — щелкните правой кнопкой мыши версию раскадровки для iPhone, откройте «Исходный код», а затем замените слово iOS.CocoaTouch на iOS.CocoaTouch.iPad и сохраните. Ваша раскадровка iPhone будет преобразована в раскадровку iPad, и теперь вы сможете использовать ее на обоих устройствах вместе с поддержкой всплывающих окон. О, извините, теперь я вижу, что то же самое было предложено в принятом ответе - я перестал читать на «вы не можете» :-) - person strange; 28.05.2014