将数据从UIViewController1传递到UIViewController2时,UIViewController2的背景颜色消失

时间:2018-02-06 20:39:40

标签: ios swift uiviewcontroller

我有两个viewController。每当我在传递数据后更改VC2的背景颜色时,如果我再次尝试传递数据,背景颜色就会消失。

UIViewController1

class ViewController: UIViewController {
    @IBOutlet weak var nameField: UITextField!

    @IBAction func continuePressed(_ sender: UIButton) {
        performSegue(withIdentifier: "secondVC", sender: self)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let destination = segue.destination as? SecondViewController {
            destination.name = nameField.text
        }
    }
}

UIViewController2

class SecondViewController: UIViewController {
    @IBOutlet weak var displayLbl: UILabel!

    var name:String?
    @IBAction func changeBackgroundColor(_ sender: Any) {
        view.backgroundColor = UIColor.brown
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        if let nameToDisplay = name {
            displayLbl.text = nameToDisplay
        }
    }

首先我输入你好,VC2的标签变成你好。然后我按下更改背景颜色按钮改变了VC2的背景颜色。它变成了棕色。我并排添加了屏幕插图。

enter image description here

我尝试再次将数据传递给VC2。这是另一个文字。当我将它传递给VC2时,VC2的背景颜色再次变为红色。

enter image description here

有人可以解释为什么背景会变成棕色的红色吗?

if let destination = segue.destination as? SecondViewController会创建新实例吗?

为什么每个人都使用这种方法将数据从VC1传递到VC2?正如您可以看到VC2中的某些内容发生了变化,我们无法获得更改。

2 个答案:

答案 0 :(得分:1)

如果您希望通过全局声明来保持颜色,则必须坚持颜色

并在viewDidLoad中进行设置,因为每次显示VC2时都会重置其原始背景颜色

答案 1 :(得分:0)

if let destination = segue.destination as? SecondViewController

不会创建新实例,只需要从故事板中创建segue创建的视图控制器。但故事板实例化的segue每次触发时都会创建一个新实例。因此,您需要将任何数据传递给您希望它使用的数据。