【问题标题】:Change UIViewController background color with custom UIToolbar XIB Swift使用自定义 UIToolbar XIB Swift 更改 UIViewController 背景颜色
【发布时间】:2021-09-02 18:48:54
【问题描述】:

我是 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
    }
  
}

【问题讨论】:

标签: ios swift uiviewcontroller uikit toolbar


【解决方案1】:

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

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
    }
}

【讨论】:

  • 关于您的答案,委托存在一些问题,它说 属性 'delegate' 类型为 'BackgroundColorControlDelegate?'无法覆盖类型为“UIToolbarDelegate?”的属性
  • 尝试将变量委托更改为其他名称
猜你喜欢
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多