Не могу понять, с чего начать создание подкласса UIControl!

Я хочу создать свой собственный элемент управления, который будет состоять из нескольких UILabels и пары UITextField. Проблема в том, что я не знаю, с чего начать! Должен ли я напрямую создавать подклассы UIControl, затем создавать свои подвиды и добавлять их в основной вид в init:? Или я использую layoutSubviews? И мне нужно будет переопределить drawRect:?

Я привык создавать классы «Контроллер», которые будут обрабатывать добавление подпредставлений, но если я создам подкласс UIControl, то я не уверен, какие методы переопределить для настройки!

Я никогда не делал этого раньше, поэтому я был бы очень признателен за несколько указателей!

Ваше здоровье!


person Michael Waterfall    schedule 25.08.2009    source источник


Ответы (1)


Вы уверены, что хотите UIControl? Класс UIControl предназначен для довольно простых, обычно повторно используемых элементов управления, таких как кнопки и текстовые поля, которые должны поддерживать ограниченный набор событий (таких как «касание» или «значение изменено»). Если вы просто пытаетесь создать способ сгруппировать несколько представлений вместе, вам следует использовать вместо этого UIView.

В любом случае, вот что вы должны сделать:

  1. Создайте свои подпредставления и установите большинство их свойств в -initWithFrame:. Сохраните их в переменных экземпляра и добавьте в качестве подпредставлений для себя.

  2. Установите их кадры в -layoutSubviews, рассчитав их на основе self.bounds. Это будет вызываться каждый раз, когда ваше представление изменяет размер, в том числе после -initWithFrame:.

Вам не нужно реализовывать -drawRect:, если только вам не нужно делать пользовательский рисунок с функциями Core Graphics.

person Becca Royal-Gordon    schedule 25.08.2009
comment
если вы добавите подпредставления, такие как UILabel, в initWithFrame и установите фрейм в layoutSubviews, означает ли это, что вы не можете использовать drawRect для дальнейшего добавления элементов пользовательского интерфейса, таких как линия, нарисованная под UILabel? - person Joo Park; 15.01.2011
comment
Вы можете использовать -drawRect: для создания пользовательского рисунка Core Graphics (или теперь UIBezierPath). Однако этот рисунок будет ниже всех подвидов — если ваши подвиды непрозрачны, рисунок -drawRect: не будет виден. Например, для UILabel вам нужно убедиться, что его backgroundColor равно [UIColor clearColor], а его свойство opaque установлено в NO. - person Becca Royal-Gordon; 15.01.2011