以編程方式構建我的視圖,但需要參考我的控制器中的視圖來設置屬性。我不能看到一種方法來實現這一目標?從ViewController訪問Programatic視圖?
我有一個參考視圖,當然控制器在它,但然後我不能訪問屬性,例如嘗試self.view.textField
作爲身份證以爲我會。
我該如何做到這一點?反之亦然,我該如何做一些事情,比如設置視圖textField來使用控制器作爲它的委託來處理它的輸入?
第一次香港專業教育學院不使用情節串連圖板,其中這一切簡單,但混亂,欣賞在這些問題上
以編程方式構建我的視圖,但需要參考我的控制器中的視圖來設置屬性。我不能看到一種方法來實現這一目標?從ViewController訪問Programatic視圖?
我有一個參考視圖,當然控制器在它,但然後我不能訪問屬性,例如嘗試self.view.textField
作爲身份證以爲我會。
我該如何做到這一點?反之亦然,我該如何做一些事情,比如設置視圖textField來使用控制器作爲它的委託來處理它的輸入?
第一次香港專業教育學院不使用情節串連圖板,其中這一切簡單,但混亂,欣賞在這些問題上
這很容易任何澄清。
直接在UIViewController
中初始化您的UI元素。
例如:
private let yourLabel: UILabel = {
let label = UILabel()
label.text = "Text"
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
override func viewDidLoad() {
super.viewDidLoad()
setupViews()
}
private func setupViews() {
view.addSubview(yourLabel)
// Setup constraints for yourLabel
}
然後訪問yourLabel
任何位置在控制器的代碼。它適用於所有的UI組件。
注意!
您可以設置所有視圖不在控制器中,但在一個單獨的視圖。然後向控制器添加一個視圖(其中包含其他子視圖)。您將可以使用這一個視圖訪問所有子視圖。但是你如何在不同的視圖中創建UI組件的方式是相同的:
let yourSubView: UILabel = { // any UI component
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
定製的實例分開UIView
:
class CustomView: UIView { // Separate view. Doesn't make the controller massive
let yourSubView: UILabel = { // any UI component
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
public func setupViews() {
addSubview(yourSubView)
// Setup yourSubView constraints
}
}
那麼你可以添加CustomView
到UIViewController
和訪問所有的子視圖CustomView
。
您需要爲您的類聲明屬性並存儲對在這些屬性中創建的視圖的引用 – Paulw11
因此,在視圖文件中,我在類級別聲明瞭UI,然後我可以訪問它們,但創建實際視圖在視圖文件中的功能? – jackdm
是的,就像你物體的任何其他屬性一樣。就像你會用'@ IBOutlet's,除了你可以省略'@ IBOutlet'位 – Paulw11