我有一个
@IBDesignable
class Fancy:UIButton
Run Code Online (Sandbox Code Playgroud)
我想要
addTarget(self, action:#selector(blah),
forControlEvents: UIControlEvents.TouchUpInside)
Run Code Online (Sandbox Code Playgroud)
那么UIButton应该在哪里完成?
addTarget
?1 - 我见过layoutSubviews
建议 - 是吗?
注意 - 实验表明,问题layoutSubviews
在于,当事物四处移动时,它可以经常被调用."addTarget"不止一次是一个坏主意.
2 - didMoveToSuperview
是另一个建议.
3 - Inits中的某个(某个)?
注意 - 如果你在Init中进行实验,那么实验会显示一个引人入胜的问题.在Init期间,IBInspectable变量尚未实际设置!(例如,我根据IBInspectable设置的控件的"样式"进行分支;它不能用作@IBInspectable:在运行时不起作用!)
4 - 其他地方???
我尝试在Init中做到这一点,并且效果很好.但它打破了编辑工作中的可设计性.
通过捶打,我想出了这个(出于某种原因,两者都必须包括在内?)
@IBDesignable
class DotButton:UIButton
{
@IBInspectable var mainColor ... etc.
required init?(coder decoder: NSCoder)
{
super.init(coder: decoder)
addTarget(self, action:#selector(blah),
forControlEvents: UIControlEvents.TouchUpInside)
}
override init(frame:CGRect)
{
super.init(frame:frame)
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会这样,我不明白为什么会有两个不同的init例程.
包含addTarget
在UIButton中的正确方法是什么?