【问题标题】:Can I *replace* the UILabel on a UIButton with FXLabel?我可以用 FXLabel *替换* UIButton 上的 UILabel 吗?
【发布时间】:2012-01-25 01:07:25
【问题描述】:

所以,我正在尝试将 UIButton 上的 UILabel 更改为 FXLabel 的实例。查看链接了解更多关于FXLabel (https://github.com/nicklockwood/FXLabel) 的信息。我知道通过使用类扩展 (Subclass UIButton to add a property),我总是可以添加另一个属性,在我的例子中,FXLabel 基本上只需添加一个子视图。不过,我喜欢 titleLabel 属性已经存在的便利性和功能。

是否有某种方法可以按子类或类别将UILabel“切换”为FXLabel

我确实知道我可以做到这一点,但这是一个非常简单的方法,并且无法证明未来。而且我不知道如何更改课程类型 (Get UILabel out of UIButton)。

UILabel *label;
for (NSObject *view in button.subviews) {
    if ([view isKindOfClass:[UILabel class]]) {
        label = (UILabel *)view;
        break;
    }
}

想法??谢谢。

【问题讨论】:

    标签: iphone objective-c ios uibutton uilabel


    【解决方案1】:

    很抱歉,但我认为您无法以任何可靠的方式做到这一点。即使您继承了UIButton 并覆盖了titleLabel 方法,您也必须处理状态设置。而且您永远不知道内部代码何时直接引用标签的私有 ivar。

    我为我的应用程序创建了一个 UIButton 的子类来执行类似的操作(自定义按钮布局和子视图),抱歉我现在不能分享它,它归客户所有。为自己的子视图创建自己的状态处理代码并不难。

    【讨论】:

    • 感谢您的帮助。我会看看我能把什么放在一起。
    【解决方案2】:

    这是您至少可以访问标签的另一种方式。创建UIButton 的子类,并在该子类中覆盖layoutSubviews。从那里您可以直接访问标签:

    - (void)layoutSubviews {
        [super layoutSubviews];
    
        UILabel *titleLabel = [self titleLabel];
    }
    

    现在我们仍然遇到将标签更改为子类的问题。我想您可以尝试将UILabel 的类与您的FXLabel 子类动态交换(详细为here),但老实说这是相当冒险的。

    我会说你最好创建自己的UIControl,你可以根据自己的喜好进行自定义。没有风险,只是纯粹的善良。模仿一个简单的UIButton 应该不会太难。祝你好运!

    【讨论】:

    • 感谢您的提示。我想我会尝试创建自己的自定义类。如果没有其他人给我更好的东西,我会将其标记为回答我的问题。谢谢!
    • 我只是破解了它并在按钮顶部添加了标签,而没有在按钮上实际设置文本。现在我必须跟踪 alpha 更改等的两个属性,但这比尝试创建自己的 UIControl 容易得多。我以后会努力的,看看有没有什么收获
    猜你喜欢
    • 2019-04-06
    • 2011-07-17
    • 1970-01-01
    • 2018-09-15
    • 2011-11-06
    • 1970-01-01
    • 2014-02-17
    • 2011-10-21
    相关资源
    最近更新 更多