如何以编程方式从MonoTouch中的ViewController加载另一个viewController

时间:2012-05-13 20:49:55

标签: xamarin.ios

我在Monotouch中使用StoryBoards并拥有一个已被指定为初始VC的ViewController。我有第二个VC,我想从第一个VC的ViewDidLoad方法以编程方式显示。 Objective-C步骤就像这样

  1. 通过Storyboard.InstantiateViewController("SecondVC")
  2. 实例化第二个VC
  3. 设置其ModalTransitionalStyle
  4. 将其委托设置为自己secondVC.delegate = self;
  5. 使用this.PresentViewController(secondVC, true, nil)
  6. 如何在MonoTouch C#代码中实现这一目标?

    我使用Storyboard.Ins..方法实例化的VC没有要设置的委托或委托属性。虽然我的代码编译,但我没有看到第二个视图。我只看到第一个视图

    任何帮助高度赞赏

    感谢

1 个答案:

答案 0 :(得分:10)

如果你延迟调用它,你应该可以这样做。我使用Threading.Timer在加载后第二次调用PresentViewController。对于委托,UIViewController没有该属性。您必须转换为适用于您正在加载的控制器的控制器类型。然后你可以设置委托。如果要使用此(self),您可能希望设置WeakDelegate而不是Delegate。

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);
}