我有一个小的xib,Teste.xib
由 TesteView 拥有
class TesteView: UIView {
@IBOutlet var tf:UITextField!
@IBOutlet var sw:UISwitch!
}
现在,我们将加载它(例如,将其填充到堆栈视图中)。
let t:TesteView = TesteView()
let v = Bundle.main.loadNibNamed("Teste", owner: t, options: nil)?[0] as! UIView
v.heightAnchor.constraint(equalToConstant: 200).isActive = true
stack?.insertArrangedSubview(v, at: 3)
事实上,这很好。
一切正常。
但请注意,您插入的是“v”,而不是“t”。“v”不是“TesteView”,它只是一些漂浮的该死的视图。
如果您执行以下操作,
t.heightAnchor.constraint(equalToConstant: 200).isActive = true
stack?.insertArrangedSubview(t, at: 3)
这是没有意义的,这是行不通的。
但是 t“是”视图,它是一个 UIView(实际上,它是一个 TesteView)。它应该是你插入的东西。
所以你必须使用“两种不同”的东西......
t.tf.text = "WTF???"
// use "t" for that sort of thing
v.heightAnchor.constraint(equalToConstant: 200).isActive = true
v.backgroundColor = UIColor.blue
// but use "v" for that sort of thing
stack?.insertArrangedSubview(v, at: 3)
“t”和“v”不一样似乎很奇怪。
(事实上,TesteView 是否应该是 UIView 的子类?也许它应该是别的东西——只是一个普通的类??似乎不能真正将它用作视图,所以它是 WTF 吗??)
这有什么问题和/或通常的成语是什么?
笔记 ...
如今,没有理由这样做。只需使用一个小的 UIViewController。几十年来,每个人都说“为什么苹果不让你简单地通过 id 加载视图控制器?”,现在你可以了。没问题:
let t = self.storyboard?.instantiateViewController(withIdentifier: "TesteID") as! Teste
t.view.heightAnchor.constraint(equalToConstant: 200).isActive = true
stack?.insertArrangedSubview(t.view, at: 3)
t.tex.text = "WTH???"