Подтвердить что ты не робот

Как создать интерфейсы Cocoa без интерфейса Builder?

Я бы предпочел программно создавать мои интерфейсы. Кажется, что все документы в Apple Developer предполагают, что вы используете Interface Builder. Возможно ли создать эти интерфейсы программно, и если да, то откуда я начну узнавать, как это сделать?

Я думал, что соответствующий документ для этого, если возможно, будет в этом разделе: http://developer.apple.com/referencelibrary/Cocoa/idxUserExperience-date.html

4b9b3361

Ответ 1

Я бы предпочел программно создавать мои интерфейсы.

Почему? Интерфейс Builder проще и быстрее. Вы не можете написать опечатку путем перетаскивания, и вы не получите эти полезные советы Aqua, когда вы печатаете прямоугольники вручную.

Не бойся. Интерфейс Builder - ваш друг. Пусть это поможет вам.

Если вы настаиваете на том, чтобы тратить свое время и энергию, написав свой интерфейс в коде:

Не основан на документах (как правило, на базе библиотеки, например Mail, iTunes, iPhoto): создайте подкласс NSObject, создайте экземпляр и сделайте его делегатом приложения и в методе делегата applicationDidFinishLaunching:, создайте окно, заполнить его просмотрами и заказать его спереди.

На основе документов (например, TextEdit, Preview, QuickTime Player). В методе makeWindowControllers в вашем подклассе NSDocument создайте свои окна (и залейте их просмотрами) и создайте для них оконные контроллеры, убедившись, что вы сами отправляете addWindowController: для каждого оконного контроллера.

Ответ 2

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

  • Реализация лучшего конструктора интерфейса.
  • Программирование динамических пользовательских интерфейсов, т.е. те, структура которых не познаваема статически (в момент компиляции /xcode ).
  • Реализация Cocoa back-end межплатформенной библиотеки или языка для пользовательских интерфейсов.

Существует ряд сообщений в блоге на работает без наконечника и последнее описание Майкла Мухи на cocoa -dev.

Ответ 3

Как полностью слепой разработчик, я могу сказать, что IB несовместим с VoiceOver (встроенный экранный ридер на OS X).

Это означает, что без доступа к надежной документации по использованию Cocoa без IB я не могу разрабатывать приложения для OS X/iPhone в Cocoa, что означает, что я (по иронии судьбы) не может легко создавать приложения, доступные для слепых (и все остальные) на OS X/iOS.

Мое текущее решение, которое я бы предпочел не использовать, - это Java + SWT, конечно, это работает для OS X, а не для iOS.

Ответ 4

Фактически, IB становится совершенно бесполезным, когда вы начинаете писать свои собственные классы пользовательского интерфейса. Скажем, что вы создаете свою собственную кнопку, которая использует систему скинов на основе plist. Или вы создаете динамическую панель инструментов, которая загружает и выгружает элементы на основе выбора пользователя.

IB не принимает пользовательские элементы пользовательского интерфейса, поэтому более сложный пользовательский интерфейс не может его использовать. И ДА, вы захотите сделать более сложные вещи, которые дает UIKit.

Ответ 5

Хотя это тихий немного старый... Я много раз пытался делать все только программно. Это сложно, но возможно.

Обновление: Я задал еще один вопрос по этой конкретной проблеме: NSOutlineView на основе представления без NIB?, и теперь Я считаю, что все можно сделать программным путем, но это невероятно сложно, без консультаций со специалистами Apple из-за отсутствия информации или примеров.


Ниже аргумент может быть не по теме, но я хотел бы отметить, почему я сильно предпочитаю программный путь.

Я также предпочитаю программный путь. Поскольку

  • Инструмент статической компоновки не может обрабатывать ничего динамического.
  • Воспроизведение одного и того же состояния пользовательского интерфейса на нескольких NIB сложно. Все неявное или скрытое. Вам нужно посетить все панели, чтобы найти параметры. Такой вид работы очень легко совершить ошибку - ошибка.
  • Управление непротиворечивым состоянием сложно. Потому что воспроизведение такого же взгляда сложно.
  • Автоматизация невозможна. Вы не можете создать автоматическую форму ввода.
  • Неверное параметрирование, такое как размер элемента, выбранного пользователем, невозможно.
  • Наведение маленькой точки намного сложнее, чем попадание пальцев в фиксированное положение - смешно, что это серьезная проблема юзабилити для разработчиков!
  • Иногда IB завинчивается. Это означает, что он компилируется и работает, но когда я открываю источник, он выглядит сломанным, а дополнительное редактирование становится невозможным. (вы, возможно, этого не испытали, но если XIB файл становится сложным, это должно произойти)
  • Это сериализация на основе изображений. Концепция хорошая. Но проблема заключается только в базе изображений. IB не сохраняет исходный код для чистой загрузки, воспроизводя исходный код. Чистая загрузка очень важна, чтобы гарантировать конкретное рабочее состояние. Кроме того, мы не можем исправить ошибки в исходном коде. Ошибка будет просто сложена бесконечно. Это основная причина, по которой мы не можем воспроизвести состояние equal (не похожего) UI в IB.

Конечно, эти вещи могут быть решены после обработки NIB UI, но если нам придется все настраивать снова, нет оснований для использования IB сначала.

С текстовым кодом легко воспроизвести одно и то же состояние - просто скопируйте код. Также легко проверить и исправить неправильную часть - потому что мы имеем полный контроль. Но в IB мы не контролируем детали жесткого плана.

IB не может быть окончательным решением. Это похоже на Photoshop, но даже Photoshop предлагает текстовые средства для создания сценариев. GUI - это движущаяся программа, а не статическое изображение или графическое изображение. Подход IB полностью ошибочен даже для визуального редактирования GUI. Если вы один из читателей Apple, читающих это, я прошу вас полностью удалить зависимость от IB в ASAP.