class CircleLabel: UILabel {required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder)!}overrIDe init(frame: CGRect) { super.init(frame: frame)}overrIDe func drawRect(rect: CGRect) { self.layer.cornerRadius = self.bounds.wIDth/2 self.clipsToBounds = true super.drawRect(rect)}overrIDe func drawTextInRect(rect: CGRect) { self.textcolor = UIcolor.whitecolor() super.drawTextInRect(rect)}func setPropertIEs(borderWIDth: float,bordercolor: UIcolor) { self.layer.borderWIDth = CGfloat(borderWIDth) self.layer.bordercolor = bordercolor.CGcolor}
}
如您所见,我实例化的每个CircleLabel都默认为UIcolor.whitecolor()的textcolor属性,该属性正常工作.在我的视图控制器的vIEwDIDLoad中,我想将CircleLabel设置为具有动态textcolor属性.所以这样的事情:
class myVIEwController: UIVIEwController { @IBOutlet weak var myCustomLabel: CircleLabel! overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad() myCustomLabel.textcolor = UIcolor.blackcolor()}
这不起作用,因为textcolor是在UILabel子类的drawRect方法中设置的.我可以在我的CircleLabel子类中实现什么(通过帮助器方法,比如我的setPropertIEs帮助器方法或其他方式),这样我可以在视图控制器中设置自定义标签的textcolor?
解决方法 截图在您的情况下,您不需要覆盖drawRect,只需创建这样的类
class CircleLabel: UILabel {required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder)! self.commonInit()}overrIDe init(frame: CGRect) { super.init(frame: frame) self.commonInit()}func commonInit(){ self.layer.cornerRadius = self.bounds.wIDth/2 self.clipsToBounds = true self.textcolor = UIcolor.whitecolor() self.setPropertIEs(1.0,bordercolor:UIcolor.blackcolor())}func setPropertIEs(borderWIDth: float,bordercolor: UIcolor) { self.layer.borderWIDth = CGfloat(borderWIDth) self.layer.bordercolor = bordercolor.CGcolor}}
然后
class VIEwController: UIVIEwController {@IBOutlet weak var myCustomLabel: CircleLabel!overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad() myCustomLabel.textcolor = UIcolor.blackcolor() // Do any additional setup after loading the vIEw,typically from a nib.}}总结
以上是内存溢出为你收集整理的ios – UILabel子类使用自定义颜色初始化全部内容,希望文章能够帮你解决ios – UILabel子类使用自定义颜色初始化所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)