9

この SO questionへの回答を実装しようとしています。問題は次のとおりです:-[drawTextInRect]は明らかに呼び出され-[drawRect]ておらず、シャドウを設定しても UITextField のテキストはシャドウされません。

もう 1 つの奇妙な点は、-[drawTextInRect]とのサブクラスの実装-[drawRect]が完全に空 (super の呼び出しでさえない) であっても、テキスト フィールドのテキストが描画されることです。

4

5 に答える 5

12

これは、UITextFieldAPI ドキュメントのバグです。ドキュメントは、オーバーライドdrawTextInRect:を使用して動作をカスタマイズできることを示しています。これはそうではありません。

実際、drawTextInRect:が呼び出されることはありませんUITextField(drawPlaceholderInRect:ちなみにどちらも呼び出されません)。

http://discussions.apple.com/thread.jspa?threadID=1727596も参照してください。

ただし、メソッドのオーバーライドはUILabel機能します。

于 2010-04-05T23:57:33.053 に答える
4

あなたが探している方法は次のとおりだと思います:

- (CGRect)textRectForBounds:(CGRect)bounds

またはおそらく

- (CGRect)editingRectForBounds:(CGRect)bounds
于 2013-02-26T14:25:01.260 に答える
3

-[drawTextInRect] は、UITextField がフォーカスを失ったときに 1 回呼び出されることに注意してください。私が欲しかったものではありません。

于 2012-06-28T13:47:35.573 に答える
0

- drawTextInRect:UITextField はメッセージに応答しません。あなたが参照しているページのコードは、 a ではUILabelなく aUITextFieldをサブクラス化しているため、うまくいきませんでした。

于 2010-03-06T02:38:23.023 に答える
-1

super を呼び出さない場合、コードの最適化中にコンパイラがメソッドを削除している可能性があります。UILabel の実装が呼び出されていることを効果的に意味します。


更新:ペン先を使用してテキストフィールドを作成している場合は、ペン先のテキストフィールドのクラスをカスタムサブクラスに設定していることを確認してください。そうしないと、カスタムコードが呼び出されません。

于 2010-01-07T01:31:46.183 に答える