Ios 在UINavigationController中前进
我有两个视图,A和B。A是表视图,B是详细视图。当在视图a中点击一个单元格时,相应的数据将加载到视图B中,我使用[self.navigationcontroller pushviewcontroller]来显示它。这一切都很好,但如果用户按第10行,让视图B加载,返回,然后再次按第10行,我希望它只前进到已经加载的视图B。navigationcontroller始终列为堆栈中只有一个视图。我是否必须手动将视图保存到navigationcontroller才能重新显示?该项目使用弧和故事板,如果这使一个不同。谢谢你,实际上你甚至不必担心导航控制器。在Ios 在UINavigationController中前进,ios,objective-c,uiviewcontroller,uinavigationcontroller,Ios,Objective C,Uiviewcontroller,Uinavigationcontroller,我有两个视图,A和B。A是表视图,B是详细视图。当在视图a中点击一个单元格时,相应的数据将加载到视图B中,我使用[self.navigationcontroller pushviewcontroller]来显示它。这一切都很好,但如果用户按第10行,让视图B加载,返回,然后再次按第10行,我希望它只前进到已经加载的视图B。navigationcontroller始终列为堆栈中只有一个视图。我是否必须手动将视图保存到navigationcontroller才能重新显示?该项目使用弧和故事板,如果这
ViewController1
中有UIViewController
变量(比如lastViewController
),其中viewA
和viewB
驻留
在按下ViewController2
之前,详细视图将该引用存储在lastViewController
中。当您弹回并按另一行时,请检查是否为同一个viewController并显示同一个viewController
但我反对这种做法。保持简单,让
ViewControllerB
再次加载。可能有这样一种情况,再次加载是优先的,因为它可能会向用户显示第10行的更多最新信息。您看到的行为是正确的!当需要ViewController B时,它将被创建并推送到导航控制器的堆栈上,我们看到视图B。当用户返回ViewController A,我们看到视图A时,ViewController B不再需要,它及其视图将不存在
这是高效、轻量级的,而且非常有意义。回到ViewController A和view A后,谁知道用户现在将点击哪一行?如果用户点击第10行并返回A,点击第10行并返回A,则每次都会创建一个新的ViewController B,并且不再存在。那又怎么样?从用户的角度来看,它是完全一致的;它看起来像是同一个视图B!这才是最重要的。你不想回到同一个视图B;您希望重新创建视图B。这就是你要做的
事实上,这就是iOS的天才。只需一个微小的屏幕,它就可以在不增加内存和其他资源负担的情况下让视图来去自如
有关UINavigationController体系结构的更多信息,请参阅我的书:返回时是否会弹出?为什么希望堆栈中仍然有刚才弹出的元素?