Как переопределить-drawrect в подклассе UIButton?

extends в ограничении типа фактически охватывает оба:

T имеет тип PBaseHierarchical или T «расширяет» PBaseHierarchical

Почти так же, как T: PBaseHierarchical в C #.

Также обратите внимание, что типы сравниваются структурно в Typescript.

12
задан mahboudz 3 May 2009 в 00:51
поделиться

4 ответа

Как и другие люди Скажем, вам не нужно создавать подкласс UIButton - на самом деле лучше не делать этого, поскольку UIButton довольно сложен (как вы обнаружили). У вас есть три варианта:

  • Оставьте заголовок кнопки пустым и добавьте новое текстовое поле к кнопке в нужной позиции.
  • Если вы используете 3.0, получите доступ к свойству метки кнопки. Хотя сам ярлык доступен только для чтения, его свойства (включая фрейм) - нет.
  • Подкласс UIControl. UIControl - это UIView, поэтому вы можете добавлять другие представления - текст и изображения, и именно UIView реализует поведение сообщения действия ( addTarget: action: forControlEvents: ). UIButton реализует контроль состояния поверх этого.

Если ты не Мне не нужны такие вещи, как UIButton setTitle: forState: и связанные с ними функциональные возможности, но вы используете множество этих элементов управления, я бы использовал третий вариант. В противном случае используйте первое (или второе, если вы используете 3.0).

20
ответ дан 2 December 2019 в 05:15
поделиться

На основании вашего комментария к одному из других ответов, это случай вопроса "Как мне сделать X с Y, чтобы достичь Z?" когда вы действительно должны спросить «Как мне добиться Z?»

Если вы хотите, чтобы кнопка рисовала текст поверх изображения, а не рядом с ним, просто сделайте изображение фоновым изображением кнопки. Используйте setBackgroundImage: forState: , а не setImage: forState: , затем установите заголовок обычным образом.

В любом случае вам придется нарисовать изображение в drawRect: или переместите текст в подпредставление, чтобы он рисовался над изображением. Решение, которое я упомянул, является версией второго варианта.

3
ответ дан 2 December 2019 в 05:15
поделиться

Как насчет добавления подпредставления поверх вида кнопки? Тогда вы будете иметь полный контроль над ним и не будете заботиться о том, что сделала кнопка. Вы могли бы даже сделать это Label и сохранить себя в DrawRect.

0
ответ дан 2 December 2019 в 05:15
поделиться

Вам не нужно создавать подкласс UIButton только для того, чтобы добавить к нему текст. Вот пример установки заголовка кнопки для пользовательской кнопки в методе -viewDidLoad подкласса UIViewController:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, 44, 44);
[button setTitle:@"x" forState:UIControlStateNormal];
[self.view addSubview:button];

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

2
ответ дан 2 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: