ios - 在 setViewControllers 之后导航堆栈为零
<p><p>这是我的层次结构:</p>
<pre><code>A - B - C - D (tabs)
| | | |
| | | |
----------------> AddEventViewController (can be called from any tabs)
|
|
|----> 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't think it's necessary because it's already in the stack
NSLog(@"nav stack1 : %@", self.navigationController.viewControllers );
/* returns stack1 : (
"<D: 0xa627990>",
"<AddEventViewController: 0x108cb7e0>",
"<SuggestFeed: 0x123735f0>"
) */
;
NSLog(@"nav stack2 : %@", 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]