以编程方式构建我的视图,但需要参考我的控制器中的视图来设置属性。我不能看到一种方法来实现这一目标?从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