有选择地在UIViewControllerContainer中推入viewWillAppear

时间:2014-02-06 04:08:15

标签: ios uiviewcontroller

我们有一个应用程序,其中模型对象可以以渐进的方式通过各种状态 - 例如,考虑Order进展到销售。 Order的每个状态都由不同的视图控制器处理。

每个视图控制器识别它可以处理的状态,并且当达到它无法处理的状态时,推动后续视图控制器处理下一个状态。各种事件都可能导致VC更新其视图;此时调用方法setupViewByOrderState。在viewDidAppear中调用相同的方法。

例如,假设Order可以通过状态1-10。 ViewController A处理状态1-2,B处理3-5,C处理6-10。

如果A在状态1或2中下达订单,则它自行配置。如果它是在状态3或更高的状态下交出订单,则它会推动B,并将订单交给订单。等

这种技术的一个优点是第一个VC是一个“入口点” - 将它交给给定的Order,它将推送所有必要的VC,直到达到一个可以处理Order的VC在其当前状态下,没有逻辑明确地编码状态 - > VC对应性,这些对应性需要存在于每个VC之外。

但是,如果想要通过视图堆栈向后弹出或解除模态,则会出现问题。一旦C弹出,就会调用B的viewDidAppear,立即将其重新打开(处理该状态下的Order) - 这会使C重新开启。

处理这个问题的适当模式是什么?

检查isBeingPresented不起作用。这些视图控制器也是自定义UIViewControllerContainer。该标志是只读的,但有关如何设置的一些知识将是很好的。

1 个答案:

答案 0 :(得分:0)

请不要使用ViewDidAppear。创建“下一个”视图控制器时,创建它,然后调用视图控制器特定的初始化方法来处理您在ViewDidAppear中处理的内容。

您想要将视图外观与Order状态分离。