簡體   English   中英

從代碼和情節提要中實例化自定義按鈕-如何創建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()

  }
}

但唯一的辦法似乎是在情節提要中設置一個預先存在的按鈕。 我希望能夠做到:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM