2009-08-13 78 views
0

我正在制作一组类似于向导的屏幕,我想知道如何使视图自行解除其父视图并立即显示'DoneScreen '而不必担心资源泄漏。我的意见如下所示:向导式导航,解散视图并显示另一个

Base -> Level1 -> DoneScreen 
       -> Level2 -> DoneScreen 

的级别1控制器与一个view.xib创建和显示导航控制器与

[self presentModalViewController ...] 

通过对基本控制器。 Level1控制器还负责创建'DoneScreen',它可以根据特定的标准显示而不是Level2屏幕。

当用户点击在屏幕上的按钮时,级别1控制器实例化的级别2控制器和它经由

[self.navigationController pushViewController ..] 

和Level2的控制器的视图具有“下一步”按钮显示。

当使用命中Level2屏幕中的'Next'按钮时,我需要关闭当前Level2的视图以及Level1的视图并显示'DoneScreen',它将被创建并传入Level2来自Level1的控制器。 (部分地减少代码重复,并且部分地以分离控制器之间的责任)与

[self.navigationController popViewControllerAnimated:YES]; 

在级别2的控制器,如果我显示“DoneScreen”的第一和驳回本身则级别1控制器的模态视图仍然存在上述'基地',但在完成屏幕下。除了Base之外,清除所有这些视图并显示“DoneScreen”的好方法是什么?

有关如何以简单而优雅的方式完成此任务的良好建议?

回答

0

谷歌搜索“iphone向导教程”只产生one good result。现在看起来像是一个更好的主意,可以制作一个包含所有向导屏幕小部件的长视图。

+0

需要注意的是,Level1到DoneScreen部分需要在同一个项目中重复使用,这就是为什么我没有在'单一视图'路线上走完'一切。 – 2009-08-13 17:58:21

+0

我以为我可以在这里使用“责任链”模式,并将“下一个”控制器从Level1传递到Level2。但是,无论我传递给Level2都必须存储,然后在它被popViewControllerAnimated解除之前,我可以显示下一个屏幕 - 问题是这是否会导致某种循环引用/内存泄漏,因为Level2的解除视图会导致它自己的控制器将开始清理,但不会因为'DoneScreen'仍然显示。 – 2009-08-13 18:04:26

0

你可以考虑在堆栈中抓取你想要的视图,制作一个新的数组,然后使用导航控制器的“viewControllers”属性将它们全部交换出去。

+0

我尝试过,但我没有看到'DoneScreen',因为我预期。相反,我回到了'Level1'屏幕。 – 2009-08-13 18:52:53

+0

我收回它 - 只显示'DoneScreen'的标题栏区域,而内容区域仍然是'Level1'的内容区域。在我交换控制器后,我检查了视图控制器的计数,并且计数结果为0 .. (NSArray * controllers = [NSArray arrayWithObjects:self。nextController,nil]; \t [self.navigationController setViewControllers:controllers animated:NO]; \t \t \t viewControllers = [self.navigationController viewControllers]; – 2009-08-13 19:18:58

+0

哦,对不起,我现在得到你所说的话,没有注意到一级是作为模态呈现的。 – criscokid 2009-08-13 19:20:41

0

唉,我的知识深度(或缺乏)导致我走到单一屏幕上的所有路线,使用多个视图取决于状态。不理想和有点混乱,但它的工作原理。感谢你的帮助。

相关问题