我正在尝试实施this SO question的答案。问题是:-[drawTextInRect]
显然没有被调用,并且在-[drawRect]
中设置阴影不会使UITextField的文本被遮蔽。
另一个奇怪的事情是,即使我的-[drawTextInRect]
和-[drawRect]
的子类实现完全为空(甚至不是对super的调用),也会绘制文本字段的文本。
答案 0 :(得分:12)
这是UITextField
API文档中的错误。该文档表明覆盖drawTextInRect:
可用于自定义行为。事实并非如此。
事实上,永远不会在drawTextInRect:
上调用UITextField
(drawPlaceholderInRect:
也不会被调用。)
另见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的类设置为自定义子类,否则将不会调用自定义代码。