ios - 使用自定义 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
}
}
解决方案
在您的自定义工具栏中添加协议
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
}
}
推荐阅读
- java - 解析失败:Lcom/google/android/gms/common/api/Api$zzf;
- xamarin - 是否有将现有 SQLite 数据库添加到 Xamarin 项目的正确方法?
- c# - ASP.net 网站使用已登录的 Windows 凭据进行 CreateDirectory/File.Copy
- php - 从 MySQL 创建和使用多维数组
- c# - 具有字母数字的名称/地址的 AD 帐户创建失败
- python - Django - 为什么我在使用 shell 时会收到 OperationalError(仅)?
- json - 如何访问绑定到 ReactJS 中组件状态的 JSON 对象的值
- airflow - 我们应该让气流调度程序运行多长时间?
- sql-server - 基于 isnull 和聚合值从嵌套查询更新统计信息
- java - 尝试安装 Lombok 时出现 java.lang.UnsatisfiedLinkError