您好,我使用 SpriteKit 制作了一个游戏,并想使用 UITableView
添加排行榜。我的 Segues 从 GameViewController 到 TableViewController 并返回,工作得很好。然而我只能这样做一次。一旦我回到我的 GameViewController,点击同一个按钮将不会第二次将我带到 TableViewController。为什么会发生这种情况?
我将其设置为当点击某个 SKSpriteNode
时,它会转到 TableViewController。目前我正在使用这行代码从 GameViewController
转到 TableViewController
(此代码在 GameScene.swift 中)
self.view!.window!.rootViewController!.performSegueWithIdentifier("showScores", sender: self)
然后我在导航栏中设置了一个后退按钮并创建了一个返回到 GameViewController 的 segue(通过将 BarButtonItem
拖到 GameViewController 并选择 presentModally
)。一些帮助将不胜感激。谢谢!
最佳答案
我认为您是在继续搜索排行榜,然后返回,但在此过程中将主要游戏 View 添加到堆栈而不是删除排行榜,因此当您再次尝试搜索时,接收到的不是可见的游戏场景的电话。
尝试在你的排行榜代码中使用这个而不是 segue(你要求 segue 回到游戏场景):
self.dismissViewControllerAnimated(true, completion: nil)
如果这不起作用,请使用代理请求游戏场景关闭排行榜。
编辑:我正在漫无边际地评论我的字数,所以我想在这里添加我的解释!
将堆栈想象成一堆纸,其中每张纸都是一个 viewController,最上面的部分是可见的(自然地)。当您以模态方式继续或呈现 viewController 时,您正在将 viewController 添加到堆栈或“向您的堆中添加一张纸”。通常,像您所做的那样来回切换通常不是一个好主意,因为您正在向堆栈中添加越来越多的“纸片”。您往往会遇到内存问题和/或烦人的错误:P。相反,以编程方式返回的最佳实践是执行以下两件事之一:如果您使用的是 navigationController,则应该调用 popViewControllerAnimated,或者如果没有使用,就像在本例中一样,则应该使用 DismissViewControllerAnimated。这两个函数都将最顶层的“一张纸”完全从堆栈中取出。解决不断将 viewControllers 添加到堆栈的问题。如果有任何令人困惑的地方(我正在用手机写这篇文章,所以可能会这样!)请给我发评论或消息,我会尽力解释得更好! :)
关于ios - Segue 只工作一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37126227/