以编程方式对UIButton进行子类化?

时间:2017-04-04 19:54:25

标签: ios swift uibutton

我在数组中有一个UIButton,我想将其子类化为SpringButton(https://github.com/MengTo/Spring)。我试过这个:

let springButton = playableCards[cardIndex] as! SpringButton

但是我收到了这个错误:

无法将'UIButton'(0x1126bf120)类型的值转换为'Spring.SpringButton'(0x10e6e62e8)。

我不想在故事板中创建插座或更改它。这是来自Swift的错误,还是来自pod本身的错误?

欢迎任何帮助!

编辑:

var playableCards: [UIButton] = []
playableCards = self.allPlayableCardsViews[0].allSubviews.flatMap { $0 as? UIButton }

allPlayableCardsViews只是一个普通的UIView。

1 个答案:

答案 0 :(得分:2)

如果故事板场景中的项目类别为UIButton,则对象 UIButton,您无法将其作为其他内容向下转发。如果您希望按钮为SpringButton,并且它们是由故事板场景创建的,则需要在故事板中设置自定义类

由于SpringButtonUIButton的子类,因此您可以在预期SpringButton的任何地方传递UIButton。只要基础对象 UIButton,您也可以将SpringButton类型的变量向下转换为SpringButton。有as?的条件向下转发比强制转发更安全。

想象一下,你有一个停车位。车辆可以停放在空间中。摩托车和汽车都是车辆的类型(如果你愿意,也可以是子类),所以要么可以停放在那里。但是,无论车辆是汽车还是摩托车,都是在建造时确定的。你不能简单地将摩托车改装成汽车,但这就是你试图用你的按钮做的事情。

相关问题