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 в свой пользовательский подкласс, иначе ваш пользовательский код не будет вызываться.