从代码和 Storyboard 中实例化自定义按钮 - 如何制作 init 方法
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()
}
}
但唯一的方法似乎是在 Storyboard 中设置一个预先存在的按钮。我希望能够做到:
let btn = EKLikeButton()
btn.frame=CGRectMake(10.0, 10.0, 40.0, 40.0)
但是当我尝试上面的方法时,我得到
Missing argument for parameter 'coder' in call
在 Swift 中,我如何创建一个既可以从代码又可以从故事板处理的初始化函数?
该错误消息告诉您它正在寻找 coder
参数,因为您只有一个 init
函数。你还没有声明一个没有参数的初始化器,所以你不能像这样初始化:EKLikeButton()
要添加接受帧参数的初始化,您还需要实现:
override init(frame: CGRect) {
super.init(frame: frame)
// set up your frame, init, whatever
}
然后你可以像这样实例化它:
let btn = EKLikeButton(CGRect(10, 10, 40, 40))
这是我经常做的事情
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()
}
}
我想创建一个这样的按钮:
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()
}
}
但唯一的方法似乎是在 Storyboard 中设置一个预先存在的按钮。我希望能够做到:
let btn = EKLikeButton()
btn.frame=CGRectMake(10.0, 10.0, 40.0, 40.0)
但是当我尝试上面的方法时,我得到
Missing argument for parameter 'coder' in call
在 Swift 中,我如何创建一个既可以从代码又可以从故事板处理的初始化函数?
该错误消息告诉您它正在寻找 coder
参数,因为您只有一个 init
函数。你还没有声明一个没有参数的初始化器,所以你不能像这样初始化:EKLikeButton()
要添加接受帧参数的初始化,您还需要实现:
override init(frame: CGRect) {
super.init(frame: frame)
// set up your frame, init, whatever
}
然后你可以像这样实例化它:
let btn = EKLikeButton(CGRect(10, 10, 40, 40))
这是我经常做的事情
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()
}
}