この SO questionへの回答を実装しようとしています。問題は次のとおりです:-[drawTextInRect]
は明らかに呼び出され-[drawRect]
ておらず、シャドウを設定しても UITextField のテキストはシャドウされません。
もう 1 つの奇妙な点は、-[drawTextInRect]
とのサブクラスの実装-[drawRect]
が完全に空 (super の呼び出しでさえない) であっても、テキスト フィールドのテキストが描画されることです。
この SO questionへの回答を実装しようとしています。問題は次のとおりです:-[drawTextInRect]
は明らかに呼び出され-[drawRect]
ておらず、シャドウを設定しても UITextField のテキストはシャドウされません。
もう 1 つの奇妙な点は、-[drawTextInRect]
とのサブクラスの実装-[drawRect]
が完全に空 (super の呼び出しでさえない) であっても、テキスト フィールドのテキストが描画されることです。
これは、UITextField
API ドキュメントのバグです。ドキュメントは、オーバーライドdrawTextInRect:
を使用して動作をカスタマイズできることを示しています。これはそうではありません。
実際、drawTextInRect:
が呼び出されることはありませんUITextField
(drawPlaceholderInRect:
ちなみにどちらも呼び出されません)。
http://discussions.apple.com/thread.jspa?threadID=1727596も参照してください。
ただし、メソッドのオーバーライドはUILabel
機能します。
あなたが探している方法は次のとおりだと思います:
- (CGRect)textRectForBounds:(CGRect)bounds
またはおそらく
- (CGRect)editingRectForBounds:(CGRect)bounds
-[drawTextInRect] は、UITextField がフォーカスを失ったときに 1 回呼び出されることに注意してください。私が欲しかったものではありません。
- drawTextInRect:
UITextField はメッセージに応答しません。あなたが参照しているページのコードは、 a ではUILabel
なく aUITextField
をサブクラス化しているため、うまくいきませんでした。
super を呼び出さない場合、コードの最適化中にコンパイラがメソッドを削除している可能性があります。UILabel の実装が呼び出されていることを効果的に意味します。
更新:ペン先を使用してテキストフィールドを作成している場合は、ペン先のテキストフィールドのクラスをカスタムサブクラスに設定していることを確認してください。そうしないと、カスタムコードが呼び出されません。