Какова лучшая практика при использовании UIStoryboards?

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

Working within teams is made more difficult as conflicts in Storyboards can be problematic to resolve (any tips with this would also be welcome) The storyboard itself can become quite cluttered and unmanageable.

Итак, мой вопрос: каковы лучшие практики использования?

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

Также я должен все еще рассмотреть место для Xibs?Эта статья имеет довольно хороший обзор многих проблем и предлагает, чтобы в сценах, которые имеют только один экран, в этом случае следует использовать xibs. Опять же, для меня это непривычно, поскольку поддержка Apple для создания экземпляров несвязанных сцен из раскадровки позволяет предположить, что у сибсов не будет места в будущем, но я могу ошибаться.

Ответы на вопрос(2)

статья упомянул много проблем при использовании StoryBoard, одна вещь, которую поднял автор, - это использование огромного количества nib-файлов в одной StoryBoard, и я согласился, что он не должен этого делать, но были и другие проблемы, такие как:

My root view controller has become a source view controller for lot of segues and therefore its prepareForSegue: has become a stupidly large method filled with a lot of “if (segue.identifier isEqualToString:@”…”)” statements in a row

а также

It is possible to assign view controllers in a storyboard an identifier. Unfortunately this identifier property is not exposed in the UIViewController class. This makes it very hard to perform safe introspection of the view controller hierarchy at runtime. It would be really nice if identifier was exposed for view controllers as well as for segues.

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

Решение Вопроса

расставание раскадровок - лучший путь. Декомпозиция делает больше, чем просто делает части интерфейса более пригодными для повторного использования. Это также делает использование раскадровок в команде более управляемым.

В последнее время многие из моих раскадровок содержали четыре или меньше сцен. Для одного человека достаточно просто создать и поддерживать один или несколько таких модулей пользовательского интерфейса. Эта практика уменьшает или устраняет конфликты слияния.

В случае, если мне нужно что-то изменить в раскадровке, принадлежащей кому-то другому, я сначала спрашиваю владельца, есть ли у него локальные изменения. Если так, у меня иногда есть владелец, чтобы добавить изменения для меня. Разложение по-прежнему требует некоторой координации, но оно существенно меньше, чем раскадровка полного приложения. С тех пор, как я начал эту практику, у меня не было никаких трудностей слияния.

Что касается XIB, я не думаю, что написал достаточно о них в своей статье. Они все еще очень полезны. Они могут быть хороши для контроллеров с одним представлением. Однако, это не то, где они действительно сияют. XIB имеют одно преимущество, которого раскадровки могут никогда не иметь. Самым основным модулем XIB является UIView, тогда как основным модулем раскадровки является UIViewController. Поскольку XIB могут содержать коллекции UIViews, они отлично подходят для визуального создания пользовательских элементов управления. В XIB я могу визуально создать поворотный циферблат или виджет GPS. Затем я могу добавить эти элементы управления и виджеты в раскадровки или другие XIB. Такие XIB чаще всего встречаются в приложениях для iPad, так как они имеют большие экраны, способные содержать множество элементов управления и виджетов. Было бы неестественно встроить UIS-переключатель в UIViewController в раскадровку.

Теперь о лучших новостях. Можно подключать раскадровки в Интерфейсном Разработчике и без написания какого-либо кода. Я планировал выпустить эту технику после WWDC, так как Apple может выпустить аналогичную функциональность в iOS 6. Однако, поскольку вы спросили, я решил выпустить ее сейчас. Вместо того, чтобы дублировать мои объяснения о том, как работает RBStoryboardLink, вы можете найти более подробную информацию о моемблог и наGitHub, Это сделает ваш UIStoryboard более приятным.

 Scott Sherwood11 июн. 2012 г., 10:02
Возможно, я переусердствую, но этот простой метод связывания раскадровок действительно является ответом на мои молитвы (и так должно быть для каждого разработчика, который еще не знает об этом). Это была главная слабость того, что я видел как отличный инструмент. Я согласен с вашей оценкой xibs, они отлично подходят для вещей, где единицей работы является UIView, так как кажется неестественным иметь их на раскадровке и загружать через ViewController. Тем не менее, думаете ли вы, что именно так Apple планирует использовать их в будущем и, следовательно, будут ли они оставаться рядом?
 11 июн. 2012 г., 14:53
Да, я верю, что XIB будут в течение долгого времени. API-интерфейс UIViewController в iOS 5 способен заменить XIB для сложных виджетов, но они излишни для более простых элементов управления и виджетов. API сдерживания также намного сложнее в использовании, чем XIB. То, что в итоге сводится к тому, чтобы иметь правильный инструмент для правильной работы.

Ваш ответ на вопрос