我是Swift的新手。 目前我已经制作了serval xib文件,它们可以使用以下代码进行渲染
let mySubview:customView = customView(frame: CGRect(x:10,y:300, width: 312, height:355))
self.view.addSubview(mySubview)
“customView”是自定义视图(.xib)文件,还有许多其他文件。但是,我想用函数参数渲染它。我使用过字符串,但是我得到了一个错误:
func addComp(name:String){
let className = NSClassFromString("MyApp."+name) as! UIView.Type
let subview = className.init()
subview.frame = CGRect(x:10,y:300, width: 312, height:355)
self.view.addSubview(subview)
}
它说
“致命错误:在打开可选值时意外发现nil”
无论如何,有没有办法用函数参数定义自定义视图?使用字符串或任何其他方法。
答案 0 :(得分:0)
我说你出现了这个错误。不要把一个字符串变成一个类型;直接使用类型。
这是一个UIView子类,其工厂方法可以完成addComp
所做的一切:
class MyFactoryView : UIView {
required override init(frame:CGRect) {
super.init(frame:frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder:aDecoder)
}
static func make(andAddTo v:UIView) {
let subv = self.init(frame:CGRect(x:10,y:300, width: 312, height:355))
v.addSubview(subv)
}
}
好的,所以我们假设我们有一些这种类型的子类:
class MyView1 : MyFactoryView {}
class MyView2 : MyFactoryView {}
所以现在不需要任何字符串。为了制作我们的小戏剧,我们直接谈谈这种类型;例如:
MyView1.make(andAddTo:self.view)