我们有一个应用程序,其中模型对象可以以渐进的方式通过各种状态 - 例如,考虑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
。该标志是只读的,但有关如何设置的一些知识将是很好的。
答案 0 :(得分:0)
请不要使用ViewDidAppear。创建“下一个”视图控制器时,创建它,然后调用视图控制器特定的初始化方法来处理您在ViewDidAppear中处理的内容。
您想要将视图外观与Order状态分离。