我正在创建弹出式自定义UIView。我创建了custom.xib,custom.swift。在我的custom.xib中,我的所有者的对象引用自定义。我在custom.swift和loadNib中使用名称" custom"实现了init func。我从init func获得了无限调用,直到我在super.init(coder: aDecoder)
收到此警告和断点。
警告:无法加载任何Objective-C类信息。这将 显着降低了可用类型信息的质量。
的ViewController
let customView: Custom = Custom(frame: CGRectMake(100,100,200,200))
self.view.addSubview(customView)
自定义
var view: Custom!
override init(frame: CGRect) {
super.init(frame: frame)
loadNib()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
loadNib()
}
private func loadNib() -> Custom {
return NSBundle.mainBundle().loadNibNamed("Custom", owner: self, options: nil)[0] as! Custom
}
答案 0 :(得分:1)
在这种情况下,您的loadNib()
方法毫无用处。它返回Custom
视图的实例,但结果从未被init
方法使用。您可以将loadNib()
声明为类方法,并在init
类中删除Custom
:
class Custom: UIView {
class func loadNib() -> Custom {
return NSBundle.mainBundle().loadNibNamed("Custom", owner: self, options: nil)[0] as! Custom
}
}
然后,您可以使用loadNib()
方法直接在Custom
中实例化ViewController
视图,并以这种方式更改框架:
let customView = Custom.loadNib()
customView.frame = CGRectMake(100,100,200,200)
self.view.addSubview(customView)
答案 1 :(得分:0)
您收到此错误的原因是您的loadNib()
和init
方法导致递归。 imnosov answer应该解决你的问题。