呼叫中参数“编码器”的参数丢失

Paw*_*wan 2 iphone uibutton uiview ios swift

我已经将自定义UIButton编码为:

 class AccountOpeningButton: UIButton {
  required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        ......
   }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用我的故事板成功实例化该类。现在,我做了一个UIView并想在我的UIView中添加此按钮为:

var customView:UIView = UIView()
customView.frame = CGRect(x: 0, y: 0, width: 350, height: 250)
.....
let fromDateBtn:UIButton = AccountOpeningButton()//Error comes here as  : Missing Argument for parameter ‘coder’ in call
customView.addSubview(fromDateBtn)
Run Code Online (Sandbox Code Playgroud)

因此,也请帮助动态地重用此代码。

PS:我提到了http://napora.org/nscoder-and-swift-initialization/ 致命错误:对类 Class 使用未实现的初始化器“ init(coder :)” 无法实现其超类的必需成员 ,但未成功。

================================================== ==================== 尝试

let fromDateBtn:UIButton = UIButton() as! AccountOpeningButton
Run Code Online (Sandbox Code Playgroud)

这将引发CastException 无法将类型为'UIButton'的值转换为'.AccountOpeningButton'

iAn*_*rag 5

替换此行

let fromDateBtn:UIButton = AccountOpeningButton()
Run Code Online (Sandbox Code Playgroud)

有了这个:

let fromDateBtn = AccountOpeningButton()
Run Code Online (Sandbox Code Playgroud)

并在您的课程中添加此方法

override init(frame: CGRect) {
        super.init(frame: frame)
    }
Run Code Online (Sandbox Code Playgroud)

您可以具有多个init方法,但是必须遵守继承和层次结构规则。您必须明确了解什么是便捷初始化器。

有关更多详细信息,请单击此处

  • 接受答案。(单击复选标记。)向上投票是可选的。接受正确答案不是。 (2认同)