如何在UIButton子类中重写-drawrect? [英] How to override -drawrect in UIButton subclass?
问题描述
HI。我需要在自定义按钮上写一些文字。所以我将UIButton子类化了。在笔直,我写了我需要的文字。问题是文本最终在按钮下面。在我写完文本之后,UIButton的画面继续前进并吸引我。
HI. I need to write some text over a custom button. So I subclassed UIButton. In -drawrect, I write the text I need. The problem is that the text ends up under the button. After I write my text, UIButton's drawrect goes ahead and draws on top of me.
我甚至没有调用[super drawrect:rect],即使我期待它调用它在我画画之前。似乎无论如何都会调用UIButton的drawrect。
I am not even calling [super drawrect: rect] even though I was anticipating calling it before I did my drawing. It seems that UIButton's drawrect will get called regardless.
任何想法?谢谢。
推荐答案
正如其他人所说,你不需要子类化UIButton - 事实上最好不要像UIButton那样相当复杂(如你所见)。您有三种选择:
As other people have said, you don't need to subclass UIButton - infact it's best not to as UIButton is pretty complex (as you found). You have three options:
- 将按钮的标题留空,并在所需位置的按钮上添加一个新文本字段。
- 如果您使用3.0访问按钮的标签属性。虽然标签本身是只读的,但它的属性(包括框架)不是。
- 子类UIControl。 UIControl是一个UIView,因此您可以添加其他视图 - 文本和图像,它是实现动作消息行为的UIView(
addTarget:action:forControlEvents:
)。 UIButton在此基础上实现了有状态。
- Leave the button's title blank and add a new text field to the button at the position you want.
- if you are using 3.0 access the button's label property. Although the label itself is read only its properties (including frame) are not.
- Sub-class UIControl. UIControl is a UIView so you can add other views - text and images and it is UIView that implements the action message behaviour (
addTarget:action:forControlEvents:
). UIButton implements statefulness on top of this.
如果您不需要像UIButton的 setTitle:forState:
和相关的功能,但你使用了很多这些控件,我会使用第三个选项。否则使用第一个(如果你在3.0,则使用第二个)。
If you don't need things like UIButton's setTitle:forState:
and associated functionality but you are using a lot of these controls I would use the third option. Otherwise use the first (or second if you are on 3.0).
这篇关于如何在UIButton子类中重写-drawrect?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!