在展开后,视图修改在Xcode中被忽略

时间:2015-08-04 11:55:06

标签: ios xcode swift

我在Xcode中设置故事板非常简单:

我有两个视图,由两个视图控制器控制:firstViewController和secondViewController。

第一个视图只有一个按钮,称为" NEXT",它会切换到第二个视图。第二个视图有两个按钮,名为" BLACK"和"返回"。按RETURN成功将segue展开到第一个视图,按BLACK将第二个视图的背景颜色更改为黑色。应用程序启动时,两个视图都有蓝色背景。

我按BLACK,第二个视图按预期更改颜色。但是在我放松并再次按NEXT后,第二个视图的背景为蓝色,而不是黑色背景。

我在网上搜索了一些关于Xcode用来管理其视图的堆栈。当展开时,堆栈"下降到一个水平",因此直观的是第二个视图"被破坏"以及新的黑色。但即使我不放松,只是使用另一个segue(堆栈上升一个级别),更改仍将被解除。似乎Xcode在来回切换时保持两个视图的原始设置。

我们如何停止对来回移动时被忽视的视图进行更改?(特别是背景颜色)

2 个答案:

答案 0 :(得分:1)

这是因为UINavigationController

  1. 您在firstViewController,只有它在堆栈上。

      

    Stack:firstViewController

  2. 您点击下一步,secondViewController已分配并被添加到堆栈中。

      

    堆叠:firstViewControllersecondViewController

  3. 您点击后,UINavigationConnectroller释放secondViewController使用的内存并将其从堆栈中删除。
      

    Stack:firstViewController

  4. 您再次点击下一步,新的secondViewController被分配并且被添加到堆栈中。
      

    堆叠:firstViewControllersecondViewController

  5. 步骤2和步骤4中的对象是完全不同的对象。你的方法是错误的,因为将它保存在内存中效率不高。如果背景已保存,您只需要这些信息。

    因此,当您按“返回”时,应该保存颜色已更改,然后重载SecondViewController init方法,读取参数(如果已更改)并相应地设置背景,而不是您的解决方案。

答案 1 :(得分:1)

这是因为第二个具有黑色背景的视图控制器已从堆栈中删除,并在再次按下第一个视图控制器上的下一个按钮时重新创建。