7

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

  1. 通过实例化第二个 VCStoryboard.InstantiateViewController("SecondVC")
  2. 设置它ModalTransitionalStyle
  3. 将其委托设置为 self likesecondVC.delegate = self;
  4. 采用this.PresentViewController(secondVC, true, nil)

如何在 MonoTouch C# 代码中实现这一点?

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

任何帮助高度赞赏

谢谢

4

1 回答 1

10

如果您延迟调用它,您应该能够做到这一点。我用 aThreading.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);
}
于 2012-05-13T22:27:28.480 回答