iOS: загрузить пользовательский UIView из пера - PullRequest
2 голосов
/ 10 декабря 2011

Я хочу создать свою собственную библиотеку пользовательского интерфейса, содержащую несколько повторно используемых элементов управления. Одним очень простым может быть LabeledView, который будет содержать UIView (наиболее вероятно UIImageView) и UILabel ниже.

----------------
| outer UIView |
| ------------ |
| |          | |
| |  UIView  | |
| |          | |
| ------------ |
| | UILabel  | |
| ------------ |
----------------

Как я могу реализовать это в Интерфейсном Разработчике и «внедрить» внутренний UIView и UILabel при создании внешнего UIView? У меня есть внешний UIView в качестве владельца файла, а внутренний UIView и UILabel связаны с IBOutlets со свойствами в моем LabeledView. Теперь я представляю функцию инициализации, например:

[[LabeledView alloc] initWithView:(UIView *)theView andLabel:(UILabel *)theLabel]

Этот метод должен загрузить View из кончика с его определенной компоновкой и вставить в него theView и theLabel. Это не может быть трудно, нет? Я не понимаю ...

Ответы [ 2 ]

1 голос
/ 10 декабря 2011

Если вы определили представления и т. Д. В nib, то вы можете добавить их во время выполнения, используя loadNibNamed:, описанное здесь: http://developer.apple.com/library/ios/documentation/uikit/reference/NSBundle_UIKitAdditions/Introduction/Introduction.html

Возвращает массив, первым объектом будет объект верхнего уровня в nib - ваш контейнерный вид в примере выше.

Вы не используете alloc / init при загрузке вещей из nib, потому что сам nib содержит сериализованную версию объекта, который уже создан.

0 голосов
/ 14 марта 2015

Это может помочь вам создать независимый подкласс UIView со своими IBOutlet и методами.Кроме того, они не зависят от «Владельца файла», что означает, что вы можете использовать их в любом месте своего кода.

Выполните следующие действия

  • Оставьте поле Владелец файла пустым.
  • Нажмите на фактическое представление в xib-файле вашего CustomView и установите его Custom Class как CustomView (имя вашего пользовательского класса представления)
  • Добавьте IBOutlet в .h файл вашего пользовательского представления.
  • В файле .xib вашего пользовательского представления нажмите на представление и перейдите в Connection Inspector. Здесь вы найдете все свои IBOutlets, которые вы определили в файле .h
  • Соедините их с соответствующим представлением.

  • В файле .m вашего класса CustomView переопределите метод init следующим образом:

    - (CustomView *) init {CustomView result = nil; NSArray elements = [[NSBundle mainBundle] loadNibNamed: NSStringFromClass ([self class]) владелец: self options: nil]; для (id anObject в элементах) {if ([anObject isKindOfClass: [self class]]) {result = anObject; break;}} вернуть результат;}

  • Теперь, когда вы хотите загрузить свой CustomView, используйте следующую строку кода [[CustomView alloc] init];

...