У меня есть небольшой XIB, 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)
Это кажется странным, что «т» и «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, но для самого представления. – holex
http://stackoverflow.com/a/41637916/2019221 – Callam
вы можете подключить выходы к _View_ не к _File's Owner_, но процедура не зависит от этого. – holex