Cocoa touch 如何向UIButton添加第二个UILabel,可根据uicontrol状态配置
我想用不同的字体和颜色显示2个字符串(在按钮的不同位置)(我正在使用按钮的Cocoa touch 如何向UIButton添加第二个UILabel,可根据uicontrol状态配置,cocoa-touch,uibutton,uilabel,calayer,drawrect,Cocoa Touch,Uibutton,Uilabel,Calayer,Drawrect,我想用不同的字体和颜色显示2个字符串(在按钮的不同位置)(我正在使用按钮的setTitle作为一个,我需要另一个),并且必须根据当前UIControlState(如颜色)更改某些属性 因此,我正在寻找向ui按钮添加第二个标签的最佳方法。 我需要根据UIControlState配置标签(例如,我希望uicontrolstatemormal和UIControleStateHighlighted使用不同的颜色) 我尝试了以下方法: 子类aUIButton并使用drawRect:虽然不推荐(我现在明白
setTitle
作为一个,我需要另一个),并且必须根据当前UIControlState
(如颜色)更改某些属性
因此,我正在寻找向ui按钮添加第二个标签的最佳方法。
我需要根据UIControlState
配置标签(例如,我希望uicontrolstatemormal
和UIControleStateHighlighted
使用不同的颜色)
我尝试了以下方法:
- 子类a
UIButton
并使用drawRect
:虽然不推荐(我现在明白了原因),但我认为这是不可能的,看起来按钮的drawRect
方法被调用了(在我的子类之一之后),即使我不调用super
- 创建一个新的
UILabel
并将其作为子视图添加到我的按钮:这工作得很好,只是当按钮的UIControlState
更改时我不知道如何更改颜色
- 创建一个新层并使用
drawLayer
:我不知道如何在每次按钮状态更改时调用drawLayer
方法(我的drawLayer
仅被调用一次,当我将我的层添加到按钮后使用setNeedsDisplay
时)
有没有其他方法可以实现我想做的事情,或者这些解决方案中的一个可能会起作用(稍作调整)
谢谢 第二种方法很好。只需添加两个目标:首先使用“所有触摸事件”更新到“正常状态”目标。使用“触地”事件对“突出显示”进行第二次更新
如果状态不仅仅是通过触摸改变的,并且希望更普遍地处理这个问题,我建议使用多线程。您真正需要的是在初始化所有这些元素时调用performSelectorInBackground(选择器根据按钮状态更新标签),然后在“更新标签”方法的末尾再次调用相同的performSelectorInBackground,创建一个无限循环。好的,我想我找到了一个有效的解决方案(至少对于我的问题)
我正在对UIButton
类进行子类化(它对我有效,因为我使用的是自定义绘制的按钮),并且我覆盖了titlelectforcontentrect
方法,每当必须显示标题时(包括状态更改后,显示前)都会调用该方法
我在按钮视图中添加了一个ui标签
,以显示我想要的第二个字符串,在titleRectForContentRect
期间,我计算标签的正确框架
位置,根据按钮的状态(self.state
)更新标签的文本字体和颜色,这就是我所需要的。对于我试图做的简单事情来说似乎有点复杂,但我想这是因为UIButton是一个不容易子类化的类。如果没有其他结果,我会看看这个解决方案。