7

私は Monotouch で StoryBoards を使用しており、初期 VC として指定された ViewController を持っています。最初の VC の ViewDidLoad メソッドからプログラムで表示したい 2 番目の VC があります。Objective-C の手順は次のようになります

  1. 経由で 2 番目の VC をインスタンス化するStoryboard.InstantiateViewController("SecondVC")
  2. その設定ModalTransitionalStyle
  3. そのデリゲートを自己のように設定しますsecondVC.delegate = self;
  4. 使用するthis.PresentViewController(secondVC, true, nil)

MonoTouch C# コードでそれを実現するにはどうすればよいですか?

メソッドを使用してインスタンス化する VC にStoryboard.Ins..は、設定するデリゲートまたはデリゲート プロパティがありません。コードはコンパイルされますが、2 番目のビューが表示されません。最初のビューしか表示されない

どんな助けでも大歓迎です

ありがとう

4

1 に答える 1

10

遅延で呼び出すと、これを実行できるはずです。を使用しThreading.Timerて、ロードの 1 秒後に PresentViewController を呼び出しました。デリゲートに関する限り、UIViewController にはそのプロパティがありません。ロードするコントローラに適用可能なコントローラ タイプにキャストする必要があります。次に、デリゲートを設定できます。これ (self) を使用する場合は、デリゲートの代わりに WeakDelegate を設定することをお勧めします。

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();

    Timer tm = new Timer (new TimerCallback ( (state)=> {
        this.InvokeOnMainThread (new NSAction (()=> {
            UIStoryboard board = UIStoryboard.FromName ("MainStoryboard", null);
            UIViewController ctrl = (UIViewController)board.InstantiateViewController ("Number2VC");
            ctrl.ModalTransitionStyle = UIModalTransitionStyle.CrossDissolve;
            this.PresentViewController (ctrl, true, null);
        }));
    }), null, 1000, Timeout.Infinite);
}
于 2012-05-13T22:27:28.480 に答える