【问题标题】:Change label colors of a custom UIButton with multiple labels使用多个标签更改自定义 UIButton 的标签颜色
【发布时间】:2011-02-04 05:53:08
【问题描述】:

我正在创建一个带有多个标签的自定义按钮。我希望能够更改突出显示/正常 UIControlStates 上标签的文本颜色。我知道可以根据控件状态更改标题文本颜色,但我似乎无法为按钮内的自定义标签弄清楚。有什么想法吗?

【问题讨论】:

  • 我在@Rich 的帮助下使用的代码在下面的单独答案中。

标签: objective-c uibutton uilabel subclass


【解决方案1】:

感谢@Rich 的想法。我将 UIButton 子类化并将这段代码放在新类中。

这是我使用的代码:

- (void)setHighlighted:(BOOL)bHighlighted
{
    [super setHighlighted:bHighlighted];

    if (bHighlighted) {
        [label1 setTextColor:[UIColor whiteColor]];
        [label2 setTextColor:[UIColor whiteColor]];
    }else {
        [label1 setTextColor:[UIColor blackColor]];
        [label2 setTextColor:[UIColor blackColor]];
    }
}

【讨论】:

  • 通常子类化 uibutton 是一个真正的痛苦,因为它是一个类集群。如果您在初始化按钮后对按钮进行 nslog,它会显示类似 UIRoundedRectButton 的内容,因此如果您将其子类化,您将不得不实现一堆它的方法。通过复制自定义样式按钮(即[UIButton buttonWithType:UIButtonTypeCustom];)类来动态继承它可能更容易,代码在这里:davedelong.com/blog/2010/10/07/…
  • 是的,它奏效了。我只使用自定义类型的按钮,所以在初始化函数中我调用 [MyCustomButton buttonWithType:UIButtonTypeCustom];
  • 另一个想法,您可以将子类中的所有消息转发到 UICustomButton 类,setHighlighted 除外。
【解决方案2】:

听起来您想使用一些继承的 UIControl 方法(例如 sendAction:to:forEvent:) 这提供了比 UIButton 更精细的控制。

【讨论】:

    【解决方案3】:

    这有点复杂,但我有一本书讨论了这个问题,它叫做高级 iOS 4 开发。基本上你必须使用运行时来换出 setHighlighted 方法。

    编辑:它在技术上适用于 tableviewcells,但它在this 下 table view whiten

    【讨论】:

    • 请注意,由于 UIButton 具有不同的实例变量和方法,因此需要对其进行一些更改。要做到这一点很容易给自定义标签和 setHighlighted: 调用 turn all to white 在带有该标签的视图上添加标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2012-09-01
    相关资源
    最近更新 更多