菜鸟教程小白 发表于 2022-12-13 00:48:26

ios - 在 setViewControllers 之后导航堆栈为零


                                            <p><p>这是我的层次结构:</p>

<pre><code>A - B - C - D (tabs)
|   |   |   |
|   |   |   |
----------------&gt; AddEventViewController (can be called from any tabs)
    |
    |
    |----&gt; SuggestFeedController (can be accessed from B only)
</code></pre>

<p>假设我当前在 D 选项卡中,我调用了 AddEventViewController。
在此之后,我想将用户重定向到“SuggestFeedController”,但我想保持层次结构,这意味着按下后退按钮应该重定向到 B 而不是 AddEventViewController 也不是 D。</p>

<p>我尝试做的事情如下:</p>

<pre><code>UITabBarController *tabbarController = ((UITabBarController *)appDelegate.window.rootViewController);
               ; // Selecting the B tab

UIStoryboard* storyboard=appDelegate.window.rootViewController.storyboard;

UICategoryFeedController *cfvC = ; // Instantiating B view Controller

SuggestFeed *suggestFeed = ;


NSArray *viewControllers = [ initWithObjects:cfvC, suggestFeed, nil]; // Trying to create my own navigation stack, B first, then Suggest Feed


; // Some guys on internet do the push, even if I don&#39;t think it&#39;s necessary because it&#39;s already in the stack


NSLog(@&#34;nav stack1 : %@&#34;, self.navigationController.viewControllers );
/* returns stack1 : (
    &#34;&lt;D: 0xa627990&gt;&#34;,
    &#34;&lt;AddEventViewController: 0x108cb7e0&gt;&#34;,
    &#34;&lt;SuggestFeed: 0x123735f0&gt;&#34;
) */


;

NSLog(@&#34;nav stack2 : %@&#34;, self.navigationController.viewControllers );
/* returns stack2 : (null) */
</code></pre>

<p>我做错了吗? (愚蠢的问题)</p>

<p>为什么 stack2 是 nil,而我已经从我的数组中设置了 viewControllers?</p>

<p>如果你能带来一些帮助,在此先感谢:-)</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您是否检查过 <code>cfvC</code> 不是 <code>nil</code>?如果 <code>@"UICategoryFeedController"</code> 与 Storyboard 中的标识符不匹配,则可能是这种情况。我问是因为这会使 <code>viewControllers</code> 成为一个空数组,这将解释您的日志记录结果。</p>

<p>另一方面,我猜你有一个设置,其中 <code>UITabBarController</code> 中的每个选项卡都包含自己的导航堆栈(即有四个 <code>UINavigationController</code> 实例,设置为标签栏 Controller 的 <code>viewControllers</code>)。其次,我假设您的示例中的 <code>self</code> 是 ViewController<code>D</code>。这意味着每当你在这个方法中调用 <code>self.navigationController</code> 时,你得到的是标签 D 中的导航 Controller ,而不管选择了哪个标签。要在选项卡 B 中设置 ViewController ,您必须在选项卡 B 中获取对导航 Controller 的引用。如果我的假设是正确的,您可以执行以下操作:</p>

<pre><code>UINavigationController *tabBNavigationController = tabbarController.viewControllers;
</code></pre>

<p>在 <em>this</em> 导航 Controller 上设置您的 <code>viewControllers</code> 数组应该可以解决问题。另外,你是对的,你不想做 <code>pushViewController</code> 位。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 setViewControllers 之后导航堆栈为零,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/25362698/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/25362698/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 setViewControllers 之后导航堆栈为零