Segue只工作过一次



嗨,我用SpriteKit做了一个游戏,想用UITableView添加一个排行榜。从我的GameViewController到TableViewController再到返回,我的分段都能完美地工作。但是我只能做一次。一旦我回到我的GameViewController,点击相同的按钮不会让我第二次进入TableViewController。为什么会发生这种情况?

我将其设置为,当某个SKSpriteNode被点击时,它会转到TableViewController。目前,我正在使用这行代码从GameViewController切换到TableViewController(此代码在GameScene.swift中)

self.view!.window!.rootViewController!.performSegueWithIdentifier("showScores", sender: self)

然后,我在导航栏中设置了一个后退按钮,并创建了一个返回GameViewController的分段(通过将BarButtonItem拖动到GameViewController并选择presentModally)。如有帮助,不胜感激。谢谢

我认为你正在向排行榜分段,然后再分段,但在这个过程中,将主游戏视图添加到堆栈中,而不是删除排行榜,所以当你再次尝试分段时,不是可见的游戏场景收到了调用。

试着在你的排行榜代码中使用这个而不是分段(你要求分段回到游戏场景):

self.dismissViewControllerAnimated(true, completion: nil)

如果不起作用,请使用代理要求游戏场景取消排行榜。

编辑:我漫无边际,评论的字数已经达到了极限,所以我想在这里添加我的解释!

把堆栈想象成一堆纸,每一张纸都是一个viewController,最上面的一张纸是可见的(自然)。当你以模式分割或呈现一个viewController时,你就是在向堆栈中添加一个viewController或"向堆栈添加一张纸"。通常情况下,像以前那样来回切换是个坏主意,因为你在堆栈中添加了越来越多的"纸片"。你往往会遇到记忆问题和/或令人恼火的错误:P。相反,编程返回的最佳实践是做两件事中的一件:如果您正在使用navigationController,则应调用popViewControllerAnimated;如果您没有,则应使用disseViewControlleranimated。这两个函数都会将最上面的"一张纸"完全从堆栈中删除。修复了不断将viewControllers添加到堆栈的问题。如果其中任何一个令人困惑(我正在手机上写这篇文章,可能会!),只要给我发一条评论或消息,我会尽力解释得更好!:)

最新更新