我有一個小的廈門國際銀行,Teste.xibloadNibNamed返回視圖,而不是「視圖」?
通過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???"
可能,您不希望爲_File的Owner_使用自定義類,而是爲視圖本身使用自定義類。 – holex
http://stackoverflow.com/a/41637916/2019221 – Callam
您可以將插座連接到_View_而不是_File的Owner_,但程序非常相似。 – holex