我有两个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的背景颜色。它变成了棕色。我并排添加了屏幕插图。
我尝试再次将数据传递给VC2。这是另一个文字。当我将它传递给VC2时,VC2的背景颜色再次变为红色。
有人可以解释为什么背景会变成棕色的红色吗?
if let destination = segue.destination as? SecondViewController
会创建新实例吗?
为什么每个人都使用这种方法将数据从VC1传递到VC2?正如您可以看到VC2中的某些内容发生了变化,我们无法获得更改。
答案 0 :(得分:1)
如果您希望通过全局声明来保持颜色,则必须坚持颜色
并在viewDidLoad
中进行设置,因为每次显示VC2时都会重置其原始背景颜色
答案 1 :(得分:0)
if let destination = segue.destination as? SecondViewController
不会创建新实例,只需要从故事板中创建segue创建的视图控制器。但故事板实例化的segue每次触发时都会创建一个新实例。因此,您需要将任何数据传递给您希望它使用的数据。