Ios 从代码和故事板实例化自定义按钮-如何创建init方法

Ios 从代码和故事板实例化自定义按钮-如何创建init方法,ios,swift,uibutton,Ios,Swift,Uibutton,我想创建如下按钮: 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 =

我想创建如下按钮:

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(CGRect(10, 10, 40, 40))
但唯一的办法似乎是在情节提要中设置一个预先存在的按钮。我希望能够做到:

let btn = EKLikeButton()
btn.frame=CGRectMake(10.0, 10.0, 40.0, 40.0)
但当我尝试上述方法时,我得到了

调用中缺少参数“coder”的参数


我如何制作一个init函数,既可以从Swift中的代码处理,也可以从脚本处理?

错误消息告诉您它正在寻找
coder
参数,因为您只有一个
init
函数。您尚未声明没有参数的初始值设定项,因此无法像这样初始化:
EKLikeButton()

要添加接受帧参数的init,还需要实现:

override init(frame: CGRect) {
    super.init(frame: frame)
    // set up your frame, init, whatever
}
然后您可以这样实例化它:

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(CGRect(10, 10, 40, 40))

该错误消息告诉您它正在查找
coder
param,因为您只有一个
init
函数。您尚未声明没有参数的初始值设定项,因此无法像这样初始化:
EKLikeButton()

要添加接受帧参数的init,还需要实现:

override init(frame: CGRect) {
    super.init(frame: frame)
    // set up your frame, init, whatever
}
然后您可以这样实例化它:

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(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()
    }
}

这是我通常做的事

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()
    }
}