我在Xcode中设置故事板非常简单:
我有两个视图,由两个视图控制器控制:firstViewController和secondViewController。
第一个视图只有一个按钮,称为" NEXT",它会切换到第二个视图。第二个视图有两个按钮,名为" BLACK"和"返回"。按RETURN成功将segue展开到第一个视图,按BLACK将第二个视图的背景颜色更改为黑色。应用程序启动时,两个视图都有蓝色背景。
我按BLACK,第二个视图按预期更改颜色。但是在我放松并再次按NEXT后,第二个视图的背景为蓝色,而不是黑色背景。
我在网上搜索了一些关于Xcode用来管理其视图的堆栈。当展开时,堆栈"下降到一个水平",因此直观的是第二个视图"被破坏"以及新的黑色。但即使我不放松,只是使用另一个segue(堆栈上升一个级别),更改仍将被解除。似乎Xcode在来回切换时保持两个视图的原始设置。
我们如何停止对来回移动时被忽视的视图进行更改?(特别是背景颜色)
答案 0 :(得分:1)
这是因为UINavigationController
。
您在firstViewController
,只有它在堆栈上。
Stack:
firstViewController
。
您点击下一步,secondViewController
已分配并被添加到堆栈中。
堆叠:
firstViewController
,secondViewController
。
UINavigationConnectroller
释放secondViewController
使用的内存并将其从堆栈中删除。
Stack:
firstViewController
。
secondViewController
被分配并且被添加到堆栈中。
堆叠:
firstViewController
,secondViewController
。
步骤2和步骤4中的对象是完全不同的对象。你的方法是错误的,因为将它保存在内存中效率不高。如果背景已保存,您只需要这些信息。
因此,当您按“返回”时,应该保存颜色已更改,然后重载SecondViewController init
方法,读取参数(如果已更改)并相应地设置背景,而不是您的解决方案。
答案 1 :(得分:1)
这是因为第二个具有黑色背景的视图控制器已从堆栈中删除,并在再次按下第一个视图控制器上的下一个按钮时重新创建。