菜鸟教程小白 发表于 2022-12-13 15:39:39

ios - 如何以编程方式展开到另一个 Storyboard中的 ViewController?


                                            <p><p>这让我抓狂了将近 2 天。我已经尝试了几乎所有的方法,但无法得到任何结果。每一篇关于展开的帖子,似乎都没有专门解决展开回到 ViewController 的问题,<em>在不同的 Storyboard中</em>,更不用说以编程方式进行了。我做错了什么????</p>

<p>我有两个 ViewControllers <strong>位于不同的 Storyboard中</strong>...</p>

<p>我想从位于我的<em>注册 Storyboard</em>中的<strong>SignupViewController</strong>放松到位于我的<em>登录 Storyboard</em>中的<strong>LoginViewController</strong>>。我想在用户成功注册后<em></em>以编程方式执行展开,收到带有“确定”按钮的确认警报,然后单击“确定”按钮。</p>

<p><strong>这是我想放松的地方,从 => 到</strong></p>

<p> <a href="/image/OIJ0u.png" rel="noreferrer noopener nofollow"><img src="/image/OIJ0u.png" alt="enter image description here"/></a> </p>

<p><strong>这就是我尝试做的方式</strong></p>

<p>所以我在我的 <em>LoginViewController.swift</em> 文件中创建了一个 <strong>unwindToLoginViewController</strong> 操作方法...</p>

<p> <a href="/image/WUhFD.png" rel="noreferrer noopener nofollow"><img src="/image/WUhFD.png" alt="enter image description here"/></a> </p>

<p>然后像这样在我的 <em>SignupViewController.swift</em> 文件中创建对它的引用...</p>

<p> <a href="/image/KWocx.png" rel="noreferrer noopener nofollow"><img src="/image/KWocx.png" alt="enter image description here"/></a> </p>

<p>随后,我按预期获得了引用...</p>

<p> <a href="/image/UsTQf.png" rel="noreferrer noopener nofollow"><img src="/image/UsTQf.png" alt="enter image description here"/></a> </p>

<p>并将<em>标识符</em>设置为相同的,这样我就可以在我的代码中引用它...</p>

<p> <a href="/image/6ihAn.png" rel="noreferrer noopener nofollow"><img src="/image/6ihAn.png" alt="enter image description here"/></a> </p>

<p>当我运行我的应用程序并成功注册用户时,我会显示带有“确定”按钮的确认警报。当用户单击“确定”按钮时,我想放松到我的 <em>LoginViewController</em>,但什么也没有发生...</p>

<p>有什么线索吗???????</p>

<p> <a href="/image/11lmp.png" rel="noreferrer noopener nofollow"><img src="/image/11lmp.png" alt="enter image description here"/></a> </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>Unwind segues 应该只用于回退到已经呈现并且仍在 ViewController 层次结构中的 ViewController 。</p>

<p>在上面的评论中,很明显情况并非如此。看起来您的意图是关闭 View 层次结构中当前的所有内容,并将其替换为完全不同的场景(示例中的登录场景)。在这种情况下,您应该只用类似的东西替换 Root ViewController (如 <a href="https://stackoverflow.com/a/41144822/1271826" rel="noreferrer noopener nofollow">https://stackoverflow.com/a/41144822/1271826</a> 所示):</p>

<pre><code>let window = UIApplication.shared.keyWindow!
let frame = window.rootViewController!.view.frame

let controller = UIStoryboard(name: &#34;Login&#34;, bundle: nil)
    .instantiateViewController(withIdentifier: &#34;...&#34;)!

controller.view.frame = frame

UIView.transition(with: window, duration: 0.3, options: .transitionCrossDissolve, animations: {
    window.rootViewController = controller
}, completion: { completed in
    // maybe do something here
})
</code></pre>

<hr/>

<p>但让我们暂时假设您确实想要使用展开转场,因为您认为 ViewController <em>会</em>在 View 层次结构中。 (我知道这里不是这种情况,但为了 future 的读者,我将探讨这种情况。)</p>

<p>底线,如果展开 segue 失败,您应该首先确认具有展开 <code>IBAction</code> 的 ViewController 确实在 ViewController 层次结构中。</p>

<p>如果您不确定 ViewController 层次结构,请暂停应用程序的执行并打印层次结构:</p>

<pre><code>(lldb) expr -l objc++ -O --
</code></pre>

<pre>&lt;UINavigationController 0x7ff341047800&gt;, state: appeared, view: &lt;UILayoutContainerView 0x7ff340f15610&gt;
   | &lt;MyApp.FirstViewController 0x7ff340c1d2f0&gt;, state: disappeared, view: &lt;UIView 0x7ff340c336a0&gt; not in the window
   | &lt;MyApp.SecondViewController 0x7ff340d08880&gt;, state: disappeared, view: &lt;UIView 0x7ff340d09620&gt; not in the window
   | &lt;MyApp.ThirdViewController 0x7ff3433089d0&gt;, state: disappeared, view: &lt;UIView 0x7ff343104b80&gt; not in the window
   | &lt;MyApp.FourthViewController 0x7ff343102810&gt;, state: disappeared, view: &lt;UIView 0x7ff340d0b150&gt; not in the window
   | &lt;MyApp.FifthViewController 0x7ff340f19c60&gt;, state: appeared, view: &lt;UIView 0x7ff340d02010&gt;
</pre>

<p>只需确保具有展开操作的 ViewController 显示在层次结构中即可。</p>

<p>最重要的是,您只能展开到 ViewController 层次结构中的当前内容,因此请确保它在那里。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何以编程方式展开到另一个 Storyboard中的 ViewController?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/46492813/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/46492813/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何以编程方式展开到另一个 Storyboard中的 ViewController?