我的目标是在一个.xib文件中存储3个非常相似的视图。
我有一个视图控制器,一个创建/处理视图的类,以及我的xib文件。这段代码完全正常运行,但令我困扰的是我们在[0],[1]和[2]的数组中盲目引用UIViews的方式,然后我们依靠我们的演员来确定我们有正确的观点。我们可能有许多这些视图的变体,在使用之前计算和验证每个视图的类型会很烦人。
我想简化这段代码,以便我可以根据类名直接实例化视图。
以下是我的例子:
ViewController.swift:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(TestView1.instanceFromNib())
self.view.addSubview(TestView2.instanceFromNib())
self.view.addSubview(TestView3.instanceFromNib())
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
TestView.swift:
let nib = UINib(nibName: "View", bundle: nil)
class TestView1:UIView {
class func instanceFromNib() -> TestView1 {
return nib.instantiate(withOwner: self, options: nil)[0] as! TestView1
}
}
class TestView2:UIView{
class func instanceFromNib() -> TestView2 {
return nib.instantiate(withOwner: self, options: nil)[1] as! TestView2
}
}
class TestView3:UIView{
class func instanceFromNib() -> TestView3 {
return nib.instantiate(withOwner: self, options: nil)[2] as! TestView3
}
}
Test.xib:
有没有更好的方法来使用UINib.instatiate()?我错过了什么吗?我可以找到的唯一选项是将视图拆分为多个文件或使用这个笨重的数组语法。任何帮助表示赞赏。
答案 0 :(得分:2)
我的目标是在一个.xib文件中存储3个非常相似的视图(这样我就没有大量文件堵塞我的项目)。
嗯,这是一个坏主意。你依赖于一个非常偶然的事实;事实是,当从笔尖加载它们时,你不知道哪个视图纯粹是索引号。在窗外抛出“大量文件堵塞我的项目”的恐惧;首先没有什么可怕的。将每个视图存储在自己的 .xib 文件中。问题解决了;现在您知道UINib加载的数组的项null
是所需的文件。 那是“最干净的”。