我以编程方式构建我的视图,但需要参考控制器中的视图来设置属性。我看不出有办法实现这个目标吗?
我有一个对视图的引用当然是控制器在其中,但是然后我无法访问属性,例如尝试self.view.textField
作为我认为的id。
我如何实现这一目标?反之亦然我如何设置视图textField以使用控制器作为其委托来处理其输入?
我第一次没有使用故事板,所有这些都更简单但更乱,感谢对这些问题的任何澄清
答案 0 :(得分:0)
这很容易。
直接在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
的所有子视图。