drawTextInRect на UITextField не вызывается - PullRequest
9 голосов
/ 17 декабря 2009

Я пытаюсь реализовать ответ на этот ТАК вопрос . Проблема в том, что -[drawTextInRect], по-видимому, не вызывается, и установка тени в -[drawRect] не приводит к затенению текста UITextField.

Другая странная вещь заключается в том, что даже если мои реализации подклассов -[drawTextInRect] и -[drawRect] полностью пусты (даже не вызов super), текстовое поле текста рисуется.

Ответы [ 5 ]

12 голосов
/ 06 апреля 2010

Это ошибка в документации UITextField API. В документации указано, что переопределение drawTextInRect: можно использовать для настройки поведения. Это не тот случай.

Фактически, drawTextInRect: никогда не будет вызываться на UITextField (кстати, drawPlaceholderInRect: также не будет вызываться).

См. Также http://discussions.apple.com/thread.jspa?threadID=1727596.

Переопределение метода на UILabel работает, хотя.

4 голосов
/ 26 февраля 2013

Я предполагаю, что метод, который вы ищете:

- (CGRect)textRectForBounds:(CGRect)bounds

или, возможно,

- (CGRect)editingRectForBounds:(CGRect)bounds
3 голосов
/ 28 июня 2012

Замечу, что - [drawTextInRect] вызывается один раз, когда UITextField теряет фокус. Не то, что я хотел.

0 голосов
/ 06 марта 2010

UITextField не отвечает на сообщение - drawTextInRect:. Код на странице, на которую вы ссылаетесь, подклассы UILabel, а не UITextField, поэтому он не работает для вас.

0 голосов
/ 07 января 2010

Если вы не вызываете super, компилятор может удалить метод во время оптимизации вашего кода. Фактически это означает, что реализация UILabel вызывается.


Обновление: Если вы используете перо для создания текстового поля, убедитесь, что вы установили класс текстового поля в кончике для своего пользовательского подкласса, иначе ваш код не будет вызываться.

...