未调用UITextField上的drawTextInRect

时间:2009-12-17 10:29:48

标签: iphone drawing uitextfield subclass shadow

我正在尝试实施this SO question的答案。问题是:-[drawTextInRect]显然没有被调用,并且在-[drawRect]中设置阴影不会使UITextField的文本被遮蔽。

另一个奇怪的事情是,即使我的-[drawTextInRect]-[drawRect]的子类实现完全为空(甚至不是对super的调用),也会绘制文本字段的文本。

5 个答案:

答案 0 :(得分:12)

这是UITextField API文档中的错误。该文档表明覆盖drawTextInRect:可用于自定义行为。事实并非如此。

事实上,永远不会在drawTextInRect:上调用UITextFielddrawPlaceholderInRect:也不会被调用。)

另见http://discussions.apple.com/thread.jspa?threadID=1727596

覆盖UILabel上的方法有效。

答案 1 :(得分:4)

我想您正在寻找的方法是:

- (CGRect)textRectForBounds:(CGRect)bounds

或可能

- (CGRect)editingRectForBounds:(CGRect)bounds

答案 2 :(得分:3)

我注意到 - 当UITextField失去焦点时,会调用[drawTextInRect]一次。不是我想要的。

答案 3 :(得分:0)

UITextField不响应- drawTextInRect:消息。您引用的页面上的代码是UILabel而不是UITextField的子类,这就是为什么它不适合您。

答案 4 :(得分:-1)

如果不调用super,编译器可能会在优化代码期间删除该方法。有效地意味着UILabel的实现正在被调用。


更新: 如果使用nib创建文本字段,请确保已将nib中textfield的类设置为自定义子类,否则将不会调用自定义代码。