2013-10-09 6 views
0

Я хотел бы создать пользовательскую форму, которая действует как UIButton. Мне нужно отправить touchUpInside на цель, как на кнопку, но я хочу использовать drawRect, чтобы изменить внешний вид кнопки при изменении состояния кнопок.Создать элемент управления UIButton LIKE с пользовательским кодом drawRect

Я читал много противоречивых вещей в сети о не подклассификации UIButton или UIControl.

  1. И что это приемлемый способ сделать это?

  2. Также, если ответ UIControl, то как вы применяете touchUpInside с использованием методов 'beginTracking'?

  3. Почему мы не можем подклассы UIButton. Я читал об этом кластер класса и не использовал UIButtonTypeCustom, потому что это не сработает, но почему это так?

Я надеюсь, что кто-то может пролить свет на это или указать на хорошее чтение.

спасибо.

+0

посмотреть, поможет ли это http://stackoverflow.com/questions/3679239/making-a-custom-button-using-a-uiview-or-overriding-uibutton – msk

+0

После прочтения обсуждения/аргумента у парней есть " м все еще немного запутался. Если это безопасно для подкласса UIButton, почему вы должны использовать IB для изменения своего типа? Кажется, немного взломать. Как вы думаете? –

+0

Ожидайте упомянутых причин [здесь, в документах Apple] (https://developer.apple.com/library/ios/documentation/uikit/reference/UIControl_Class/Reference/Reference.html#//apple_ref/occ/cl/UIControl) Я не думаю, что подклассификация UIButton - хорошая идея. Рассмотрим подкласс UIView или пользовательский тип UIButton. – msk

ответ

1

У меня была такая же проблема, когда я хотел сделать пользовательскую кнопку. Я также прочитал много сообщений, которые, похоже, не попали по правильному пути в подкласс UIButton. В вашем случае я бы рекомендовал подклассификацию UIButton и переопределить метод setHighlighted: для настройки кнопки при выборе. У меня есть подкласс UIButton под названием LDGradientButton, который можно найти по адресу lightdesign/LDGradientButton. Не стесняйтесь взглянуть на код чертежа. В моем случае я использовал CALayers, но если бы я делал это, я бы использовал CoreGraphics.

Смежные вопросы