从ViewController访问Programatic View?

时间:2017-08-25 11:35:08

标签: ios swift mvvm delegates

我以编程方式构建我的视图,但需要参考控制器中的视图来设置属性。我看不出有办法实现这个目标吗?

我有一个对视图的引用当然是控制器在其中,但是然后我无法访问属性,例如尝试self.view.textField作为我认为的id。

我如何实现这一目标?反之亦然我如何设置视图textField以使用控制器作为其委托来处理其输入?

我第一次没有使用故事板,所有这些都更简单但更乱,感谢对这些问题的任何澄清

1 个答案:

答案 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的所有子视图。