Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UINavigationController中前进_Ios_Objective C_Uiviewcontroller_Uinavigationcontroller - Fatal编程技术网

Ios 在UINavigationController中前进

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才能重新显示?该项目使用弧和故事板,如果这

我有两个视图,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体系结构的更多信息,请参阅我的书:

返回时是否会弹出?为什么希望堆栈中仍然有刚才弹出的元素?