![](/img/trans.png)
[英]Loading UIViewController from storyboard through its custom init method
[英]Instantiate custom button from code and Storyboard - how to make an init method
我想创建一个像这样的按钮:
import UIKit
class EKLikeButton: UIButton {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.layer.cornerRadius = 5.0;
self.layer.borderColor = UIColor.redColor().CGColor
self.layer.borderWidth = 1.5
self.backgroundColor = UIColor.blueColor()
self.tintColor = UIColor.whiteColor()
}
}
但唯一的办法似乎是在情节提要中设置一个预先存在的按钮。 我希望能够做到:
let btn = EKLikeButton()
btn.frame=CGRectMake(10.0, 10.0, 40.0, 40.0)
但是当我尝试以上方法时,我得到
呼叫中参数“编码器”的参数丢失
我将如何创建一个既可以从代码又可以从Swift中的故事板处理的初始化函数?
这就是我平常做的事
class EKLikeButton: UIButton {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setUp()
}
init(){
super.init(frame: CGRectZero)
setUp()
}
override init(frame: CGRect) {
super.init(frame: frame)
setUp()
}
func setUp(){
self.layer.cornerRadius = 5.0;
self.layer.borderColor = UIColor.redColor().CGColor
self.layer.borderWidth = 1.5
self.backgroundColor = UIColor.blueColor()
self.tintColor = UIColor.whiteColor()
}
}
该错误消息告诉您它正在寻找该coder
参数,因为您只有一个init
函数。 您尚未声明不带参数的初始化程序,因此无法像这样进行初始化: EKLikeButton()
要添加一个接受frame参数的init,您还需要实现:
override init(frame: CGRect) {
super.init(frame: frame)
// set up your frame, init, whatever
}
然后,您可以像这样实例化它:
let btn = EKLikeButton(CGRect(10, 10, 40, 40))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.