【问题标题】:correcting navigation between VCs in existing app更正现有应用程序中 VC 之间的导航
【发布时间】:2023-03-17 08:16:01
【问题描述】:

我有一个相当简单的应用程序,它是一个适合小孩子的游戏。有一个主屏幕和 5 个单独的级别。 5 个级别中的 3 个由多个 VC 组成,其中动作发生在该行中的第一个 VC 中,然后代码调用模态 segue 到该行中的下一个,依此类推,直到它到达行的末尾和一个modal segue 被称为链接回主屏幕。只有一个 VC 的关卡执行操作,然后转回主 VC。

应用程序中的每个 segue 都是模态的。 此外,每个页面 (VC) 都有一个主页按钮,如果按下该按钮将转到主页

我在 StoryBoard 中设置了这一切,视觉上一切正常,但在添加声音时我意识到似乎有一个大问题。

如果我现在理解正确(也许我不理解),模态序列实际上并不会用新请求的 VC 替换当前的 VC,而是将新请求的 VC 滑到原来的上方并使其成为可见显示。

目前我从 main 转到 1 级。1 级会做一些事情并播放一些通过计时器重复的声音。如果我在视觉上继续回到主界面,一切都很好,除了 1 级 VC 中的计时器正在播放的声音继续播放并且 xCdoe 多次给我以下错误

2013-01-21 22:16:07.901 TTBetaDev[678:c07] Warning: Attempt to present <MainMenuViewController: 0x7e02f40> on <BonusViewController: 0x7ecbfa0> whose view is not in the window hierarchy!

下面是我的故事板的屏幕截图,以防我没有很好地解释布局。

应该如何设置以允许我想要的导航?我需要采取哪些步骤才能将其应用于我已经在情节提要中构建的内容?还是我必须重新完成所有的故事板工作?

我尝试了苹果 VC 文档,但我无法理解与我尝试做的事情相关的内容。

有人可以帮我解释一下吗

【问题讨论】:

    标签: ios xcode navigation uistoryboard uistoryboardsegue


    【解决方案1】:

    你有前进和后退的segues。你不应该这样做。

    例如Look 和 Main 和 VC 2。

    你有一个从 Main 到 VC 2 的转场。这意味着 Main 会将 VC 2 呈现为模态视图控制器。

    当 Main 执行此操作时,尽管它仍在 VC2 下方的堆栈中。

    然后你有一个从 VC2 到 Main 的 segue。这意味着 VC2 将创建一个新的 Main 并以模态方式呈现它。如果您继续使用该应用程序,您将拥有多个 main 实例,并且所有其他 VC 和内存消耗都会猛增。

    你需要做的是删除所有倒退的segues。 (即像从 VC2 到 Main 的那个)

    那么当你想从 VC2 回到 main 时,你必须关闭 VC2。

    在主...

    //present VC2
    [self performSegueWithIdentifier:@"VC2Segue" sender:nil];
    
    //dismiss VC2
    [self dismissViewController:vc2ViewControllerInstance];
    

    或在 VC2 中...

    //dismiss VC2 from itself
    [self dismissViewController:self];
    

    但最主要的是你不能使用 segues 来倒退。

    TL:DR

    任何东西都不应该继续 INTO Main。任何进入 main 左侧的 segues 都应该被删除并妥善处理。

    【讨论】:

    • 非常感谢你这样说是很有意义的。
    • 为了重置显示的视图控制器,我一直在 viuewcontroller 中创建一个 UIButton 并从该按钮返回到同一个视图控制器。鉴于您的解释,特别是内存问题,这可能是一个坏主意。我应该如何将视图控制器的内容和值“重置”回第一次加载时的状态?
    • 我会创建一个名为“displayDefaultContent”之类的方法。在这里,您设置所有默认数据。然后在 viewDidLoad 你运行 [self displayDefaultContent];并在您的按钮上按下您运行 [self displayDefaultContent];以及您需要重置视图的其他任何地方都可以执行此操作。
    • 这是有道理的。有没有办法轻松查询故事板上所有图像视图的中心点,以便将它们放回原处。似乎我可以枚举对象并将它们的中心点存储在一个数组中,但不确定如何做到这一点,但这听起来像我在正确的轨道上吗?
    • 嗯...您可以创建一个包含 UI 元素(如 UIImageView)和默认设置(可能是字典或只是 CGPoint 等)的 NSObject 子类。然后,当视图加载时,您可以遍历 UIImageViews 并将设置存储在 NSObject 中并将 NSObjects 放入数组中。什么的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 2014-11-15
    相关资源
    最近更新 更多