Каков наилучший способ загрузить пользовательский UIView? - PullRequest
0 голосов
/ 08 октября 2010

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

Я знаком с созданием ячеек таблицы клиента для использования в таблице, но я никогда не создавал пользовательское представление снова.

Мой вопрос: каков наилучший способ загрузки этого представления?Я попытался просто поместить представление в контроллеры представления. Я хочу, чтобы оно отображалось при использовании IB, но этого недостаточно.Мне кажется, что было бы разумно, если бы вы установили Class Class Identity для представления, которое должно загружать это представление при создании контроллера представления.Или, может быть, этого не происходит, потому что он не знает, из какого пера получить его (конечно, в своем собственном пике).

Поскольку это не контроллер представления, я не могу просто использовать initWithNibName.Я попытался использовать NSBundle loadNibNamed, как я делаю с ячейками таблицы, но это кажется ужасно большой объем работы.Код выглядит следующим образом:

NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:nil options:nil];
for (id currentObject in topLevelObjects) {
    if ([currentObject isKindOfClass:[MyCustomView class]]) {
        self.customView = currentObject;
        break;
    }
}
[self.view addSubview:self.customView];

Должен быть более простой способ, не включающий цикл.Кроме того, создание представления таким образом заставляет меня потерять всю информацию от IB о том, где я фактически разместил представление.Он создан в 0,0, что не там, где я хочу.Да, я знаю, что могу установить новый кадр, но опять же, должен быть более простой способ.Есть ли способ сделать это через IB?Или хотя бы с меньшим количеством программной работы?

Ответы [ 2 ]

1 голос
/ 08 октября 2010

Попробуйте: создайте новый подкласс UIViewController (называемый ParentViewController ради ответа), который каждый из ваших контроллеров, которым необходимо отобразить эту информацию, будет также подклассом.Этот контроллер должен , а не иметь связанный с ним кончик.

В ParentViewController создайте IBOutlet для UIView, который будет содержать ссылку на представление, содержащее ваш индивидуальный кончик.(Называется customView, опять же только потому, что)

Теперь откройте перо (для обычно используемого customView) в Интерфейсном Разработчике и выберите Владелец файла.Теперь на вкладке Identity выберите ParentViewController, созданный выше для класса.Теперь здесь начинается хитрость.В Соединениях удалите любое соединение для «просмотра» (если оно есть) и создайте соединение от выхода customView до самого верхнего UIView кончика, который определяет ваш customView.

Теперь, когда вы выполняете loadNibNamed вкод для подкласса ParentViewController, он должен автоматически загружать UIView из вашего пера и помещать ссылку на него в розетку, которую вы сможете использовать.Цикл не требуется.

Вы также можете добавить розетки для любых других компонентов интерфейса в перо и сделать то же самое.

Удачи!

1 голос
/ 08 октября 2010

Я тоже так делаю. Я столкнулся с проблемой, что я хочу подкласс UIView и использование пера в то же время. Я не думаю, что есть лучший способ сделать это, потому что файл пера может содержать много объектов, и вы должны указать, какой из них использовать. Тем не менее, сделайте так, чтобы вы могли поместить IBOutlet в MyCustomView и связать его в IB, чтобы представление могло управлять собой, например. переопределение layoutSubviews.

...