MonoTouch以编程方式为ContainerView实例化ViewController

我正在尝试使用MonoTouch中的容器视图,并且在线学习了一些教程。 他们讨论从容器中以编程方式添加和删除视图控制器。 我在我的项目的故事板中创build了视图控制器和视图,并附加了几个插口和一个动作(分别用于标签和button)。 我创build了一个重载的构造

下面是视图控制器中的代码,我试图将viewControllers添加到容器视图。

public override void ViewDidLoad () { base.ViewDidLoad (); ContainerView.AutoresizingMask = UIViewAutoresizing.FlexibleHeight; _controllerOne = new IngredientsController("Perishables"); _controllerTwo = new IngredientsController("Spices"); AddChildViewController(_controllerOne); ContainerView.AddSubview(_controllerOne.View); _controllerOne.DidMoveToParentViewController(this) } 

当我添加_controllerOne的子视图时,我得到一个错误,因为我的控制器上的元素被标记为空。 如果控制器是在Interface Builder中生成的,MonoTouch将不能以编程方式创build视图控制器? 以下是成分控制器的两个构造函数。 当使用segue时,所有的UI控件都被正确初始化。 我需要以编程方式创build控制器,然后以这种方式实例化吗? 任何帮助,将不胜感激。

 //This ctor does not work public IngredientsController (string title) : base(NSObjectFlag.Empty) { _ingredientTitle = title; } //This ctor works public IngredientsController (IntPtr handle) : base (handle) { } 

尝试交换如下所示的AddSubView()DidMoveToParentViewController()方法:

 public override void ViewDidLoad () { base.ViewDidLoad (); ContainerView.AutoresizingMask = UIViewAutoresizing.FlexibleHeight; _controllerOne = new IngredientsController("Perishables"); _controllerTwo = new IngredientsController("Spices"); this.AddChildViewController(_controllerOne); // Root child controller. _controllerOne.DidMoveToParentViewController(this); // Confirm the rooting. ContainerView.AddSubview(_controllerOne.View); // Access the view. } 

尝试像这样实例化视图控制器:

 public override void ViewDidLoad () { base.ViewDidLoad (); this.ContainerView.AutoresizingMask = UIViewAutoresizing.FlexibleHeight; var newController = this.Storyboard.InstantiateViewController("IngredientsController"); this.AddChildViewController (newController); this.ContainerView.AddSubview (mapController.View); } 

确保在ViewController的属性面板中设置了Storyboard Id