我有 2 个视图,A 和 B。A 是表格视图,B 是详细视图。当在视图 A 中点击一个单元格时,会在视图 B 中加载适当的数据,我使用 [self.navigationcontroller pushviewcontroller] 来呈现它。这一切都很好,但是如果用户按下第 10 行,让视图 B 加载,返回并再次按下第 10 行,我希望它只是前进到已经加载的视图 B。导航控制器总是列出堆栈中只有一个视图。我是否必须手动将视图保存到导航控制器才能重新呈现?该项目使用 ARC 和 Storyboard,如果这有所不同的话。谢谢
2 回答
为此,您甚至不必关心自己navigationcontroller
。在您的位置和居住地中有一个UIViewController
变量(比如说lastViewController
) 。ViewController1
viewA
viewB
在将ViewController2
详细视图存储在lastViewController
. 当您弹回并按下另一行时,检查它是否相同的 viewController 并显示相同的 viewController。
但我建议不要使用这种方法。保持简单,让我们ViewControllerB
再次加载。可能会出现再次加载优先的情况,因为它可能会向用户显示更多最新信息 row10。
你看到的行为是正确的!当需要 ViewController B 时,它会被创建并推送到导航控制器的堆栈中,我们会看到视图 B。当用户返回 ViewController A 并看到视图 A 时,不再需要 ViewController B,它和它的视图都会消失不存在了。
这是高效且轻量级的,并且非常有意义。一旦你回到 ViewController A 和视图 A,谁知道用户现在将点击哪一行?如果用户点击第 10 行并返回到 A,点击第 10 行并返回到 A,一遍又一遍,一个新的 ViewController B 将被创建并且每次都不存在。所以呢?从用户的角度来看,它是完全一致的;它看起来像同一个视图B!这才是最重要的。你不想回到同一个视图 B;您想重新创建视图 B。这就是你所做的。
确实,这就是 iOS 的天才之处。通过一个小屏幕,它可以让视图来来去去,而不会给内存和其他资源带来负担。
有关您在此处使用的 UINavigationController 架构的更多信息(主-详细信息),请参阅我的书:http ://www.aeth.com/iOSBook/ch19.html#_navigation_controllers