DrawTextInRect на UITextField не вызывается

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

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

Ответ 1

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

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

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

Выполняется переопределение метода на UILabel.

Ответ 2

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

- (CGRect)textRectForBounds:(CGRect)bounds

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

- (CGRect)editingRectForBounds:(CGRect)bounds

Ответ 3

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

Ответ 4

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

Ответ 5

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


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