使用不同的 NavigationController 但在同一个故事板上将 ViewController 呈现给 ViewController

PresentViewController to a ViewController with a different NavigationController but on the same storyboard

我在使用简单的 Xamarin Studio Storyboards 概念时遇到问题。请参阅下面的屏幕截图以获得视觉效果并查看 downloadable source code here

假设我有一个带有 MainViewController 的 NavigationController。这在我的故事板中可见。我想要一个按钮,当按下它时,它会弹出一个带有 RedViewController 的新 NavigationController。我还希望 RedViewController 与 MainViewController 在同一个故事板上。在这个项目中,我尝试这样做,但出于某种原因,当我执行以下操作时:

var myStoryboard = AppDelegate.Storyboard;
// Instatiating View Controller with Storyboard ID 'StuffViewController'
RedViewController = myStoryboard.InstantiateViewController ("RedViewController") as RedViewController;
RedViewController.ModalTransitionStyle = UIModalTransitionStyle.CoverVertical;
this.PresentViewController(RedViewController, true, null);

红色ViewController 没有它的导航控制器。出现时 RedViewController 的 Navigation Controller 为 null!我在那里做错了什么?

现在,当我在完全独立的情节提要中创建 NavigationController & BlueViewController 时,它工作正常。当我按下蓝色按钮时,它会转到蓝色 ViewController 并正确显示它是 NavigationController。为什么这个有效而另一个无效?我能看到的唯一区别是它们位于不同的故事板上。

UIStoryboard storyBoard = UIStoryboard.FromName ("BlueStoryboard", null);
UIViewController controller = storyBoard.InstantiateInitialViewController () as UIViewController;
controller.ModalTransitionStyle = UIModalTransitionStyle.CoverVertical;
this.PresentViewController (controller, true, null);

ViewController 可以呈现一个新的 NavigationController & ViewController ViewController 称为 "Red" 带有导航栏

如果你想展示红色控制器及其导航控制器,你应该实例化导航控制器(反过来,实例化红色控制器),然后展示它。

当您实例化您的新视图控制器时,您需要实例化 UINavigationController,而不是 RedViewController

对于您的 'blue' 代码,您实例化了 initialViewController - 这是包含 Blue 控制器的导航控制器。

你想要

RedViewNavigationController = myStoryboard.InstantiateViewController ("RedViewNavigationController") as UINavigationController;

其中 'RedViewNavigationController' 是嵌入了 Red View Controller 的导航控制器的标识符。