Вопрос:

Раскадровки против старого способа XIB

ios storyboard xib

30831 просмотра

2 ответа

9176 Репутация автора

Я новичок в iOS, и мне было интересно, что лучше всего учиться. Я прочитал некоторые ответы здесь и ТАК, но некоторые люди говорят, что использование раскадровок заставит других сначала изучать XIB. Есть ли реальная выгода для изучения XIB? Являются ли XIB проще для понимания и помогут с раскадровками?

Автор: cdub Источник Размещён: 12.12.2012 07:38

Ответы (2)


72 плюса

310097 Репутация автора

Решение

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

Есть вещи, которые вы можете сделать с пером, которые вы не можете сделать с раскадровкой. В наконечнике вы можете создавать ссылки на местозаполнитель владельца файла. Вы можете создавать несколько представлений верхнего уровня, редактировать их и создавать связи между ними. Посмотрите этот ответ для примера того, почему вы хотите это сделать. Вы можете добавить внешние заполнители объектов (редко используемая функция).

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

Вы должны определенно узнать о перьях в какой-то момент. Хотите ли вы начать с них или начать с раскадровки, вероятно, не так уж важно. Просто найдите учебники, которые вам нравятся, и поработайте с ними с любым типом файла (перо или раскадровка), который они используют.

Автор: rob mayoff Размещён: 12.12.2012 07:57

164 плюса

2709 Репутация автора

Изучение обоих подходов полезно.

Помимо исторической ценности подхода XIB, XIB также обеспечивают модульность. Возможно, у вас есть библиотека кода или вы хотите поделиться полезным виджетом, который вы сделали. Использование подхода xib будет способствовать такому обмену и повторному использованию.

Подход xib также дает вам большую гибкость с точки зрения вашего собственного кода. Например, iOS 5 содержала ошибку с UITableViewподдержкой Accessibility / VoiceOver, которая могла привести -dequeueReusableCellWithIdentifier:к возврату, nilнесмотря на то, что документально подтверждено иное (см. Этот пост в блоге для получения дополнительной информации). Для динамической загрузки ячеек табличного представления из xib предусмотрена возможность обхода ошибки.

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

Одним из больших преимуществ Storyboard является возможность просмотра всего графического интерфейса вашего приложения. Уменьшите масштаб, и вы увидите, как все взаимосвязано и течет. С xibs, хотя модульность хороша, сложнее представить, как все соединяется и течет вместе. Это может быть полезно для вас, или если у вас есть большая команда, чтобы поделиться с другими, чтобы увидеть, как приложение движется.

В обоих подходах есть ценность, и полезно знать оба, чтобы вы могли выбрать лучший инструмент для своей задачи.

Обновление 2014-10-06 - Так как я написал выше, я участвовал в большем количестве проектов. Некоторые с xib, некоторые могут использовать раскадровки.

Раскадровки очень сильно повзрослели (сейчас мы находимся на Xcode 6), и с ними очень много хорошего. Мне очень нравится, как можно сделать гораздо больше в раскадровке, которая немного сложнее в xib-подходе. Пара примеров:

Во-первых, когда вы работаете с UITableViewили UICollectionViewсколько вы можете работать с прототипами ячеек прямо в раскадровке. Много приятной и простой настройки, большая часть тяжелой работы может быть в раскадровке, меньше кода. Это довольно мило. Попытка сделать это в xib-подходе, безусловно, выполнима, но для этого нужно сделать гораздо больше.

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

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

Поскольку время и работа развивались, я обнаружил, что раскадровки отлично подходят для создания прототипов. Возможность быстро начать работу - огромное преимущество раскадровок. Там есть большая скорость в их использовании. Но скорость зависит от стоимости. Когда дело доходит до написания «реального» кода для какого-то проекта, я просто собираюсь придерживаться xibs, потому что, хотя это может быть больше работы, это более гибкий маршрут, который лучше работает в больших командах или со временем.

Обновление 2015-04-07 Еще одно обновление, потому что проекты последних нескольких месяцев заставили меня использовать раскадровки, которые предоставили больше идей.

Во-первых, некоторые вещи требуют того или иного подхода. Например, очевидно, что при работе с классами размеров в xibs были некоторые ошибки в крайнем случае, которые не делали то же самое в раскадровке. Так что, если на вас влияют ошибки, это может заставить вашу руку так или иначе. Другой способ - помнить, что раскадровки обычно работают на UIViewControllerуровне, поэтому, если вам нужно выполнить что-то вроде загрузки UIViewили UICollectionViewCellзагрузки, это, вероятно, будет лучше обслуживать xib.

Во-вторых, и я не знаю, почему это сначала не пришло мне в голову, но нет ничего, что требовало бы от вас использовать единую раскадровку для всего вашего проекта! Я думаю, что природа раскадровки позволяет людям тяготеть таким образом, но мы не должны помнить ничего, что предписывает это (что я знаю).

То, что я нашел, хорошо работает - это обычно подходить к каждой «группировке просмотров» для раскадровки. То есть часто ваши ViewControllers имеют тенденцию быть изолированными и в конечном итоге равны 1 на раскадровку (или xib). Но у вас может возникнуть ситуация, когда у вас есть два тесно связанных ViewController, и имеет смысл поместить их в одну раскадровку, особенно потому, что тогда вы можете легко соединить между ними что-то, например сегменты.

Главное преимущество нескольких раскадровок? Работаем в командах. Таким образом, Фред может работать над своей раскадровкой, а Вильма - над ее раскадровкой, и нет никаких серьезных проблем слияния или координации работы! Использование нескольких раскадровок (и, как правило, 1 ViewController на раскадровку) очень помогло в использовании раскадровок в многопользовательской команде разработчиков.

Совершенно очевидно, что Apple хочет, чтобы мы предпочитали раскадровки, и в эти дни я все больше их воспринимаю. Использование нескольких раскадровок, но при необходимости использование xib, теперь работает довольно хорошо.

Обновление 2015-09-21 Теперь, когда Apple выпустила Xcode 7 , появилась еще больше причин для принятия раскадровок, поскольку Apple работает над устранением недостатков.

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

Еще одним улучшением является то, что вы можете создавать отдельные UIViewклассы в раскадровке. Однако на момент написания этой статьи у меня были смешанные результаты. Простые случаи работают хорошо, но некоторые «сложные» вещи - нет. Например, у меня был UIViewControllerс ним UITableViewвнутри. Так как это должна была быть простая таблица с 5 статическими ячейками, я просто создал 5 UITableViewCellсессий как часть ViewController в раскадровке. Казалось бы, работает, но тогда во время выполнения ничего не будет фактически загружаться и обнаруживаться; переехалUITableViewCellс сиб, и все заработало. Я не уверен, что я делал что-то не так или что это может быть, так что YMMV. Но, тем не менее, даже если есть некоторые причуды, со временем я уверен, что Apple разрешит их, и тогда еще один барьер против раскадровок упадет. Я бы сказал, что если вам нужна такая поддержка, вы должны попробовать и посмотреть, как она идет для вас. Там большое обещание.

Все больше и больше раскадровок складываются, чтобы быть превосходными.

Автор: hsoi Размещён: 14.03.2013 09:36
Вопросы из категории :
32x32