如何从模态XIB设置VC的背景颜色



在此应用中,我希望允许用户更改主菜单的背景颜色。在MenUVC中,用户将单击标记为"选择颜色"的按钮。XIB文件将出现" ColorPickervc"。

我为此创建了一个@ibaction,并包含以下代码:

 @IBAction func colorPickerPressed = (_ sender: Any) {   
        let colorPicker = ColorPickerVC()
        colorPicker.modalPresentationStyle = .custom
        present(colorPicker, animated: false, completion: nil)
    }

颜色拾取器从XIB文件中寄电,并以网格格式显示9种颜色(UIBUTTON)。

当用户敲击颜色时,colorpickervc的背景会更改为颜色:

@IBAction func tile1(_ sender: Any) {
        view.backgroundColor = tile1Color.backgroundColor

然后,用户点击了一个"确认"按钮,这会忽略视图并返回menuvc:

@IBAction func confirmBtnPressed(_ sender: Any) {
        dismiss(animated: false, completion: nil)
}

这是我正在努力的事情:在"确认"操作中,我希望Menuvc背景颜色也更改为ColorPickervc背景(用户之前选择的颜色)

关于如何实现这一目标的任何想法?

谢谢斯科特

您应该了解委托模式:

首先创建一个定义所需函数的协议:

protocol ColorPickerProtocol: class {
    func didSelectColor(_ color: UIColor)
}

使用该协议扩展您的ViewController并实现该方法:

class BackgroundColorViewController: UIViewController, ColorPickerProtocol {
    func didSelectColor(_ color: UIColor) {
        view.backgroundColor = color
    }
}

在XIB内部创建一种通过代表并在所需的buttonpress上调用didSelectColor函数的方法:

class ColorPickerXib {
    weak var delegate: ColorPickerProtocol?
    @IBAction func dismissButtonPressed(_ sender: UIButton) {
        delegate?.didSelectColor(color)
        self.dismiss()
    }
}

最终用适当的代表在您的ViewController中实例化XIB并显示:

let colorPicker = ColorPickerXib()
colorPicker.delegate = self
// Show Xib

最简单的方法…

当用户选择颜色将颜色保存到用户默认值时(因此它将持续而不是一个颜色)。

在菜单VC的viewWillAppear中,读取用户默认值的颜色。

通常,您将对这种事情使用委托协议,但是鉴于它只是一种颜色,并且可能需要记住该颜色,用户默认值是更容易的路线(因为您必须在某些地方保存颜色指向并将其重新阅读)

相关内容

  • 没有找到相关文章

最新更新