2011-12-21 63 views
8

因此,我试图改变UIButton上的UILabel而不是FXLabel的实例。查看更多关于FXLabelhttps://github.com/nicklockwood/FXLabel)的链接。我知道通过使用类扩展(Subclass UIButton to add a property),我总是可以添加另一个属性,在我的情况下,只需添加一个子视图基本上FXLabel。但是,我喜欢titleLabel财产的便利和功能。我可以*用FXLabel替换UIButton上的UILabel吗?

是否有某种方法通过子类或类别将UILabel“切换”为FXLabel

我知道我可以做到这一点,但它是如此黑客,并不是未来的证明。而且我不知道如何改变班级类型(Get UILabel out of UIButton)。

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

的思考?谢谢。

回答

5

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

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    UILabel *titleLabel = [self titleLabel]; 
} 

现在我们仍然坚持将标签更改为子类的问题。我想你可以尝试动态地将UILabel的课程与FXLabel子课程(详细的here)交换,但说实话这很危险。

我想说你最好创建自己的UIControl,你可以自定义你的心中的内容。没有风险,只是纯粹的善良。模仿一个简单的UIButton不应该太难。祝你好运!

+0

感谢您的提示。我想我会尝试创建自己的自定义类。如果没有其他人给我更好的答案,我会将其标记为回答我的问题。谢谢! – 2011-12-21 08:05:32

+1

我只是黑了它,并在按钮上添加了标签,而没有实际设置按钮上的文字。现在我必须跟踪alpha变化的两个属性,但是这比创建我自己的UIControl容易得多。我将来会研究它,看看我能得到什么 – 2011-12-23 22:35:57

1

对不起,但我不认为你可以用任何可靠的方式做到这一点。即使你使用UIButton,并且覆盖了titleLabel方法,你也必须处理状态设置。而且你永远不知道什么时候内部代码直接指向标签的私人ivar。

我为我的应用程序创建了一个UIButton的子类,用于执行类似的操作(自定义按钮布局&子视图),抱歉,我现在无法共享它,它由客户拥有。为您自己的子视图创建自己的状态处理代码并不难。

+0

感谢您的帮助。我会看看我可以放在一起。 – 2011-12-21 08:05:53

相关问题