ios - Segue 只工作一次?

标签 ios swift sprite-kit

您好,我使用 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/

相关文章:

ios - AFNetworking 在多语言应用程序中崩溃

ios - 删除 tableView 中的错误行

ios - SpriteKit : Use one instance of a Class in multiple scenes?

ios - SpriteKit : Questionable results from Time Profiler

ios - 如何根据自动布局约束使容器 View 的高度动态化?

iphone - 如何在多种单元格类型中使用新的 iOS 6 registerClass UITableView 方法

ios - 主从申请,传递对象

ios - 如何在 ios swift 中正确实现后台获取

ios - 点击扩展 UICollectionViewCell

objective-c - SK节点生命周期