如何在架构 MVC 中安排一个视图?通过代码编码时

How to arrange a view in architecture MVC? When coding through code

我正在学习架构MVC,通过代码编写界面。 我正在尝试 link 一个视图和一个控制器。 但它不起作用。我的错误是什么?

控制器:

import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        ViewExample.setupUI()
    }
    
}

查看:

import UIKit

class ViewExample: UIView {
    
    static func setupUI() {
        
        let view = UIView()

        let labelTitle: UILabel = {
            let label = UILabel()
            label.translatesAutoresizingMaskIntoConstraints = false
            label.text = "Hello, world!"
            
            return label
        }()
        
        view.backgroundColor = .white
        view.addSubview(labelTitle)
        
        NSLayoutConstraint.activate([
            labelTitle.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 10),
            labelTitle.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10),
            labelTitle.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -10),
            
        ])
        
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
}

我明白为什么需要静态。为什么它对我不起作用?我还没有在 github 上找到任何好的例子。所以,我不得不求助于你

我不明白你为什么要使用 static,你想设置 UIView 实例的 UI,因此不需要 static class 方法。 在你的 ViewExample:

import UIKit

class ViewExample: UIView {

  func setupUI() {

    let labelTitle: UILabel = {
        let label = UILabel()
        label.translatesAutoresizingMaskIntoConstraints = false
        label.text = "Hello, world!"
        
        return label
    }()
    
    self.backgroundColor = .white
    self.addSubview(labelTitle)
    
    NSLayoutConstraint.activate([
        labelTitle.topAnchor.constraint(equalTo: self.safeAreaLayoutGuide.topAnchor, constant: 10),
        labelTitle.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 10),
        labelTitle.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -10),
        
    ])
    
}

override init(frame: CGRect){
    super.init(frame: frame)
    setupUI()
}

required init?(coder: NSCoder) {
    super.init(coder: coder)
    setupUI()
}

}

在你的ViewController

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let view = ViewExample(frame: (x: 0, y: 0, width: 200, height: 50)) //Change the frame according to where you want to position your view
         self.addSubview(view)
      }

   }