iPhone: создайте повторно используемый компонент (элемент управления), который имеет некоторые части Interface Builder и некоторый код

Я хочу создать повторно используемый компонент (настраиваемый элемент управления) для iPhone. Он состоит из нескольких стандартных элементов управления, предварительно размещенных в представлении, а затем некоторого связанного кода. Мои цели:

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

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

Одноразовый способ сделать это довольно просто: я просто создаю UIView, который содержит UIActivityIndicatorView, два UIImages ( один для значка успеха и один для значка ошибки), а также UILabel для сообщения об ошибке. Вот скриншот, на котором соответствующие части отмечены красным:

alt text

Затем я подключаю части к розеткам и вставляю код в свой контроллер.

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

  • Я могу перетащить коллекцию представлений и элементов управления в раздел «Пользовательские объекты» библиотеки; затем, позже, я могу перетащить их обратно в другие представления. Но (а) он забывает, какие изображения были связаны с двумя UIImage, (б) требуется много ручного переназначения четырех или пяти выходов и (в), что наиболее важно, это не приносит с собой кода. (Может быть, есть простой способ связать код?)
  • Думаю, я мог бы создать IBPlugin; не уверен, что это поможет, и, похоже, много работы, а также это ' Мне не совсем понятно, работают ли IBPlugins для разработки iPhone.
  • Я подумал: «Хм, с этим связан код, который пахнет контроллером», поэтому я попытался создать собственный контроллер (например, WebServiceValidatorController ) со связанным файлом XIB. Это действительно выглядит многообещающе, но тогда я не могу понять, как в Interface Builder перетащить этот компонент на другие представления. WebServiceValidatorController - это контроллер, а не представление, поэтому я могу перетащить его в окно документа, но не в представление.

У меня такое чувство, что я упускаю что-то очевидное ...

40
задан Mike Morearty 27 October 2010 в 18:22
поделиться