以模态方式呈现的视图使选项卡控制器(某种程度上)重置。

3
我有一个应用程序,它的主控制器是tab bar controller。每个标签页都有一系列带有导航控制器的视图,我通常会将这些视图推入和弹出堆栈中。
奇怪的问题是:
情况1:如果我创建一个UINavigationController,并将一个新的视图控制器作为其根视图,然后呈现此NavigationController。在新的导航堆栈中,我可以轻松地模态呈现一个视图并解除呈现而没有任何问题。
情况2:现在不使用新的UINavigationController,我呈现一个视图,当我解除呈现时,下面的视图表现得很奇怪。例如,如果呈现视图是UICollectionView,则它只会滚动回到第一个单元格,就像执行"reload"操作并"scrollTo"到第一个单元格。如果呈现视图是从根视图推送的视图,则它只会弹回根视图,这显然不是预期的。
在实现UITabbarController之前,我没有遇到这个问题,所以我想,当在UITabbarController中呈现视图并解除呈现时,我应该更了解底层发生了什么。
我猜测,在UITabbarController视图中解除呈现视图时,它会将所有内容“重置”为当前选项卡的第一个视图。尽管我不确定这是正确的。
我知道这有点抽象,但我无法不想着我可能漏掉了什么关键性的东西。
2个回答

8

我犯了一个愚蠢的错误,即在viewDidAppear中定义导航控制器而不是viewDidLoad中定义,因此当我将窗口的根视图设置为tabbar controller时,导航控制器没有正确设置。这就是为什么出现所有奇怪的行为。如果只是崩溃而不是这种奇怪的行为,那将更好。


太好了!我犯了同样的愚蠢错误,直到看了你的帖子才意识到。非常感谢! - Greg A
同样的错误。谢谢。 - mra214

-1

您可以尝试这个方法返回到您的第一个视图控制器。

- (IBAction)buttonPressedFromVC2:(UIButton *)sender
{
    [self dismissViewControllerAnimated:YES completion:nil];
} // This is going back to VC1. 

这个方法将在第二个 viewcontroller.m 文件中。它是一个按钮点击方法。


谢谢您的回答,但这不是关于如何取消视图的问题。取消视图很好,但在模态呈现的视图消失后,呈现视图控制器的行为变得奇怪。 - user3806731

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接