我正在尝试实现这个 SO question的答案。问题是:-[drawTextInRect]
显然没有被调用,并且设置阴影-[drawRect]
不会使 UITextField 的文本被遮蔽。
另一个奇怪的事情是,即使我的子类实现-[drawTextInRect]
和-[drawRect]
完全是空的(甚至没有调用 super),文本字段的文本也会被绘制。
我正在尝试实现这个 SO question的答案。问题是:-[drawTextInRect]
显然没有被调用,并且设置阴影-[drawRect]
不会使 UITextField 的文本被遮蔽。
另一个奇怪的事情是,即使我的子类实现-[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 失去焦点时被调用一次。不是我想要的。
UITextField 不响应- drawTextInRect:
消息。您引用的页面上的代码子类 aUILabel
不是 a UITextField
,这就是它对您不起作用的原因。
如果您不调用 super,编译器可能会在优化代码期间删除该方法。实际上意味着 UILabel 的实现被调用。
更新:如果您使用笔尖创建文本字段,请确保您已将笔尖中文本字段的类设置为您的自定义子类,否则您的自定义代码将不会被调用。