首页 > 解决方案 > 使用自定义 UIToolbar XIB Swift 更改 UIViewController 背景颜色

问题描述

我是 swift 新手,我想从我已经在 XIB 创建的自定义 UIToolbar 更改我的 UIViewController 背景颜色。我也已经将自定义工具栏添加到我的键盘上。我怎样才能做到这一点?

在我的工具栏中,我有一个按钮,指示用户可以设置为 UIViewController 的背景颜色的颜色。

我的自定义工具栏

我的自定义工具栏

自定义工具栏类,ColorToolbar.swift

import UIKit

class ColorToolbar: UIToolbar {
    
    @IBOutlet weak var purpleButton: UIBarButtonItem!
    @IBOutlet weak var blueButton: UIBarButtonItem!
    @IBOutlet weak var greenButton: UIBarButtonItem!
    @IBOutlet weak var yellowButton: UIBarButtonItem!
    @IBOutlet weak var redButton: UIBarButtonItem!

   var makeNotesVC = MakeNotesVC()
  
    var selectedColor : UIColor = UIColor.clear

    
    
    override func awakeFromNib() {
        super.awakeFromNib()
        setupButtonColor()
    }
    
    @IBAction func colorButtonPressed(_ sender: UIBarButtonItem) {
        guard let color = sender.tintColor else {return}
        selectedColor = color
        print(selectedColor)
       makeNotesVC.view.backgroundColor = selectedColor
    }
    @objc func changeBgColor(){
        makeNotesVC.view.backgroundColor = selectedColor
    }
    private func setupButtonColor(){
        purpleButton.tintColor = Constants.TintColorButton.purple
        blueButton.tintColor = Constants.TintColorButton.blue
        greenButton.tintColor = Constants.TintColorButton.green
        yellowButton.tintColor = Constants.TintColorButton.yellow
        redButton.tintColor = Constants.TintColorButton.red
    }
}

我想更改背景颜色的 UIViewController 类 MakeNotesVC.swift

import UIKit

class MakeNotesVC: UIViewController {

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    @IBOutlet weak var titleTextfield: UITextField!
    @IBOutlet weak var notesText: UITextView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        addColorbutton()
    }
    
    @IBAction func saveButtonPressed(_ sender: UIBarButtonItem) {
        let newNote = Note(context: context)
        newNote.title = titleTextfield.text
        newNote.text = notesText.text
        self.navigationController?.popToRootViewController(animated: true)
    }
    
    func addColorbutton(){
        // TODO : Add Color Options Toolbar
    
        //Register custom toolbar
        let toolbar = UINib(nibName: "Toolbar", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! ColorToolbar
        toolbar.sizeToFit()
        //Add toolbar to keyboard
        titleTextfield.inputAccessoryView = toolbar
        notesText.inputAccessoryView = toolbar
    }
  
}

标签: iosswiftuiviewcontrolleruikittoolbar

解决方案


在您的自定义工具栏中添加协议

protocol BackgroundColorControlDelegate: AnyObject {
    func changeBackgroundColor(sender:Any, color: UIColor)
}

import UIKit

class ColorToolbar: UIToolbar {

    @IBOutlet weak var purpleButton: UIBarButtonItem!
    @IBOutlet weak var blueButton: UIBarButtonItem!
    @IBOutlet weak var greenButton: UIBarButtonItem!
    @IBOutlet weak var yellowButton: UIBarButtonItem!
    @IBOutlet weak var redButton: UIBarButtonItem!

   var makeNotesVC = MakeNotesVC()
   var selectedColor : UIColor = UIColor.clear
   weak var delegate: BackgroundColorControlDelegate?


    override func awakeFromNib() {
        super.awakeFromNib()
        setupButtonColor()
    }

    @IBAction func colorButtonPressed(_ sender: UIBarButtonItem) {
        guard let color = sender.tintColor else {return}
        selectedColor = color
        print(selectedColor)
        delegate?.changeBackgroundColor(sender: self, color: color)
    }
    @objc func changeBgColor(){
        makeNotesVC.view.backgroundColor = selectedColor
    }
    private func setupButtonColor(){
        purpleButton.tintColor = Constants.TintColorButton.purple
        blueButton.tintColor = Constants.TintColorButton.blue
        greenButton.tintColor = Constants.TintColorButton.green
        yellowButton.tintColor = Constants.TintColorButton.yellow
        redButton.tintColor = Constants.TintColorButton.red
    }
}

从 MakeNotesVC 调用委托

import UIKit

class MakeNotesVC: UIViewController {

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
@IBOutlet weak var titleTextfield: UITextField!
@IBOutlet weak var notesText: UITextView!

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

@IBAction func saveButtonPressed(_ sender: UIBarButtonItem) {
    let newNote = Note(context: context)
    newNote.title = titleTextfield.text
    newNote.text = notesText.text
    self.navigationController?.popToRootViewController(animated: true)
}

func addColorbutton(){
    // TODO : Add Color Options Toolbar

    //Register custom toolbar
    let toolbar = UINib(nibName: "Toolbar", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! ColorToolbar
    toolbar.sizeToFit()
    toolbar.delegate = self
    //Add toolbar to keyboard
    titleTextfield.inputAccessoryView = toolbar
    notesText.inputAccessoryView = toolbar
}

}

extension MakeNotesVC: BackgroundColorControlDelegate  {
    func changeBackgroundColor(sender:Any, color: UIColor) {
        view.backgroundColor = color
    }
}

推荐阅读