【问题标题】:Why is my navigation stack mixed up after unwind segue?为什么我的导航堆栈在展开 segue 后混淆了?
【发布时间】:2019-03-09 08:18:44
【问题描述】:

我的导航路线如下所示:

A 是嵌入在标签栏控制器中的UITableViewController。 点击其中一行到B,这是一个嵌入在导航控制器中的视图控制器。点击B 上的粉色按钮会推送视图控制器C,然后将“Recent Songs”转至D。最后,点击D 上的歌曲运行uploadSong() 方法

-(void) uploadSong {
    ViewControllerB *viewControllerB = [self.storyboard instantiateViewControllerWithIdentifier:@"viewControllerB"];
    ViewControllerA *viewControllerA = [self.storyboard instantiateViewControllerWithIdentifier:@"viewControllerA"];

    NSArray *vcArray = @[self,viewControllerA,viewControllerB];
    [self.navigationController setViewControllers:vcArray animated:YES];
    [self performSegueWithIdentifier:@"unwindToViewControllerB" sender:self];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    if ([segue.identifier isEqualToString:@"unwindToViewControllerB"]){

        ViewControllerB *viewControllerB = segue.destinationViewController;
        viewControllerB.object = self.friendObject;
        viewControllerB.spotifyDismiss = YES;
        viewControllerB.hidesBottomBarWhenPushed = YES;
    }
}

一切顺利,我最终回到B,导航控制器的后退按钮按我的意愿将我带回A。但是,我发现如果我点击标签栏项目(左下角),它会再次显示D,而不是执行应用程序中常见的操作并将您带到堆栈中的第一个视图控制器,在这种情况下会是A

所以我的问题是,为什么在我的 unwind segue 之后,我的后退按钮从 B 将我带到 A,但点击标签栏项目会将我带到 D 而不是 A

【问题讨论】:

    标签: ios objective-c uinavigationcontroller navigation unwind-segue


    【解决方案1】:

    似乎修复只是将视图控制器放在vcArray 中,以明显正确的顺序[viewControllerA, viewControllerB, self] 而不是[self, viewControllerA, viewControllerB]。现在,无论我是点击后退按钮还是标签栏项目,我的导航堆栈的行为都完全正确。

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 2012-12-07
      相关资源
      最近更新 更多