如何在UIButton子类中重写-drawrect? [英] How to override -drawrect in UIButton subclass?

查看:351
本文介绍了如何在UIButton子类中重写-drawrect?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆