1

MonoTouch でコンテナー ビューを操作しようとしていますが、オンラインでいくつかのチュートリアルに従っています。彼らは、View Controllerをコンテナからプログラムで追加および削除することについて話しています。プロジェクトのストーリーボードにビューコントローラーとビューを作成し、いくつかのアウトレットと 1 つのアクション (それぞれラベルとボタン用) を接続しました。オーバーロードされたコンストラクトを作成しました

ビューコントローラーをコンテナービューに追加しようとしているビューコントローラーのコードを次に示します。

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 のサブビューを追加すると、コントローラーの要素が null とマークされているため、エラーが発生します。コントローラーがInterface Builderで作成された場合、MonoTouchはビューコントローラーをプログラムで作成できませんか? 以下は、Ingredient Controller の 2 つのコンストラクターです。セグエを使用すると、すべての UI コントロールが適切に初期化されます。プログラムでコントローラーを作成し、その方法でインスタンス化する必要がありますか? どんな助けでも大歓迎です。

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

//This ctor works
public IngredientsController (IntPtr handle) : base (handle)
{
}
4

2 に答える 2

0

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.
}
于 2013-02-14T03:12:55.627 に答える