我试图以编程方式在我的主视图控制器上放置自定义视图类的视图。这是我的代码:
import UIKit
class BarControl: UIView {
// MARK: Initialization
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let button = UIButton(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
button.backgroundColor = UIColor.redColor()
button.addTarget(self, action: "ratingButtonTapped:", forControlEvents: .TouchDown)
addSubview(button)
}
override func intrinsicContentSize() -> CGSize {
return CGSize(width: 240, height: 44)
}
}
在我的主视图控制器中:
let myView = BarControl()
出现错误"缺少参数'编码器'在电话"
我应该在let myView = BarControl()
的括号中添加什么内容?
答案 0 :(得分:1)
当我继承UIView时,我总是覆盖init(frame:CGRect)并添加任何其他实现。然后xcode通常告诉你 - 'required':初始化'init(编码器:)'必须由'UIView'的子类提供,如果你点击那个错误并点击输入它会自动添加那个额外的初始化器。好吧,我一直这样做而没有完全理解为什么我必须添加我从不使用的额外初始化器。而你的问题终于让我找到了原因。我在以下链接中找到了关于此初始化器混淆(?)的好教程。
http://www.edwardhuynh.com/blog/2015/02/16/swift-initializer-confusion/
这是一篇关于你的混淆的简短文章(?)=)
基本上你的问题的答案是你应该覆盖init()来调用BarControl()而不是init(编码器aDecoder:NSCoder!)。此外,您必须添加所有UIView的初始化程序,以根据文章使用您要使用的初始化程序。
答案 1 :(得分:0)
fonction原型看起来像这样:
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
// Your code here
}
我认为你不需要选购?