Динамическое изменение цвета фона в VC

#swift #uiviewcontroller

Вопрос:

Я застрял с этой частью моего домашнего задания.
может быть, кто-нибудь объяснит мне, как ее решить.

«VC содержит контроллер со встроенным контроллером. Как родительский, так и дочерний контроллер имеют три кнопки: Зеленую, Желтую, Фиолетовую. При нажатии на одну из кнопок родительского контроллера цвет фона дочернего контроллера меняется на соответствующий. Когда вы нажимаете на кнопку в ребенке, фон родителя меняется.»

Вот что я сделал в своем коде
Родительский ВК

 import UIKit

class OrangeViewController: UIViewController, VioletControllerDelegate {
   
    

    var delegate: VioletControllerDelegate?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            let vcV = segue.destination as! VioletViewController
            vcV.bgColor = view.backgroundColor
            vcV.delegate = self
        }

    
    @IBAction func greenOButton(_ sender: Any) {
        //TO DO
    }
    
    @IBAction func yellowOButton(_ sender: Any) {
        //TO DO
    }
    
    @IBAction func purpleOButton(_ sender: Any) {
        //TO DO
    }
    
    func setColor(color: String) {
        view.backgroundColor = UIColor(named: color)
    }
}
 

Дочерний ВК

 import UIKit
protocol VioletControllerDelegate{
    func setColor ( color : String)
}

class VioletViewController: UIViewController {
    var bgColor : UIColor?
   
    var delegate: VioletControllerDelegate?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        var bgColor = view.backgroundColor
    }
    
    @IBAction func setGreen(_ sender: Any) {
        delegate?.setColor( color: "green")
    }
    @IBAction func setYellow(_ sender: Any) {
        delegate?.setColor( color: "yellow")
    }
    
    @IBAction func setViolet(_ sender: Any) {
        delegate?.setColor( color: "violet")
    }
    
    func setColor ( color : String){
    view.backgroundColor = UIColor(named: color)
    }
}
 

Спасибо!

Ответ №1:

Я сделал это. На случай, если кому-то понадобится что-то подобное, я публикую свой ответ:

Родительский ВК

 import UIKit

class OrangeViewController: UIViewController, VioletControllerDelegate {
   
   
    

    var childVC: VioletViewController?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            let vcV = segue.destination as! VioletViewController
            self.childVC = vcV
            vcV.delegate = self
        }

    
    @IBAction func greenOButton(_ sender: Any) {
        childVC?.view.backgroundColor = UIColor.green
    }
    
    @IBAction func yellowOButton(_ sender: Any) {
        childVC?.view.backgroundColor = UIColor.yellow
    }
    
    @IBAction func purpleOButton(_ sender: Any) {
        childVC?.view.backgroundColor = UIColor.purple
    }
    
    func setColor( color : UIColor) {
        view.backgroundColor = color
    }
}
 

Дочерний ВК

 import UIKit
protocol VioletControllerDelegate{
    func setColor ( color : UIColor)
}

class VioletViewController: UIViewController {
    
   
    var delegate: VioletControllerDelegate?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
    
    @IBAction func setGreen(_ sender: Any) {
        delegate?.setColor( color: UIColor.green)
    }
    @IBAction func setYellow(_ sender: Any) {
        delegate?.setColor( color: UIColor.yellow)
    }
    
    @IBAction func setViolet(_ sender: Any) {
        delegate?.setColor( color: UIColor.purple)
    }
    
    
}