是否可以制作可重用的代码来添加背景图片?如果是这样,如何?

is it possible to make reusable code for adding background image? If so, how?

我正在研究 Swift,我想知道如何以编程方式将相同的背景图像添加到不同的视图控制器中。

override func viewDidLoad() {
    super.viewDidLoad()
    
    setBackground()
}


func setBackground() {
    view.addSubview(backgroundImageView)
    backgroundImageView.translatesAutoresizingMaskIntoConstraints = false
    backgroundImageView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    backgroundImageView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    backgroundImageView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    backgroundImageView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    
    backgroundImageView.image = UIImage(named: K.imageForFirstScreen)
    view.sendSubviewToBack(backgroundImageView)
}

目前,我在每个视图控制器中都设置了 setBackground() 函数,因为我想在多个视图控制器上显示相同的背景图像,并且每次都在 viewDidload 中调用该函数。所以,我想知道是否有办法在某处声明 setBackground 函数,我可以在 viewDidLoad 中调用该函数。我知道我可以在属性检查器中设置背景图片,但我想知道如何在代码中编写。

您可以使用多种方法。一种是将方法放在 UIViewController 扩展名中,然后在 UIViewController sub-classes 中调用它。

extension UIViewController {
    func setBackground() {
        //...
    }
}

然后:

override func viewDidLoad() {
    super.viewDidLoad()
    
    setBackground()
}
 extension UIViewController {
     func setBackground(color: UIColor?) {
        self.view.backgroundColor = color
     }
 }

使用方法:现在你在UIViewController的各个子类中都会有这个功能

class MyNewClass: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        setBackground(color: UIColor.red)
    }

}