我们有一个应用程序,在那里模型对象可以以渐进的方式通过各种状态-例如,可以考虑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,这会立即将其放回on (以处理该状态下的订单) --这会将C放回on。
处理这个问题的合适模式是什么?
检查isBeingPresented不起作用。这些视图控制器也在自定义的UIViewControllerContainer中。该标志是只读的,但知道如何设置它会更好。
发布于 2014-02-07 02:20:27
只要不使用ViewDidAppear就行了。当您创建“下一个”视图控制器时,请创建它,然后调用特定于视图控制器的初始化方法来处理您在ViewDidAppear中处理的内容。
您希望将视图外观与订单状态解耦。
https://stackoverflow.com/questions/21593801
复制相似问题