使用btouch导出子类UIViewController

时间:2013-10-30 08:00:06

标签: uiviewcontroller xamarin.ios

我正在尝试将 Cordova 导出到 Monotouch 。在大多数情况下,它正在工作,但我遇到的问题是CDVViewController(来自 UIViewController )的委托方法不会触发。 CDVViewController中定义的委托方法和我定义的事件 Monotouch (即从CDVViewController派生的类)似乎都没有。

这是一些代码;我试图导出的 Cordova 代码的第一个片段:

CDVViewController.h:

@interface CDVViewController : UIViewController<UIWebViewDelegate, CDVCommandDelegate> {    
}

@property (nonatomic, strong) CDVCordovaView* webView;

CDVViewController.m:

@implementation CDVViewController

@synthesize webView;

- (void) viewDidLoad 
{
    [super viewDidLoad];
    NSLog(@"%s","Cordova viewDidLoad");
}

我的 btouch 定义如下:

using System;
using MonoTouch.Foundation;
using MonoTouch.UIKit;

namespace Omnimove.Web.Cordova
{
    [BaseType(typeof(UIWebView))]
    interface CDVCordovaView 
    {
    }

    [BaseType (typeof (UIViewController))]
    interface CDVViewController 
    {
        [Export ("webView")]
        CDVCordovaView WebView { get; set; }
    }
}

这是我的类派生自 Monotouch 中的 CDVViewController

public class UIFormsViewController : CDVViewController
{           
    public override void ViewDidLoad ()
    {       
        Console.WriteLine (@"UIFormsViewController ViewDidLoad()");
        base.ViewDidLoad ();
    }
}

正如我在开始时提到的,代码编译并且 UIFormsViewController 确实显示其包含 CDVCordovaView UIWebView ),但< UIFormsViewController 中定义的em> ViewDidLoad 和 CDVViewController 中定义的 viewDidLoad 似乎根本没有触发。任何人都可以解释为什么会这样,以及如何纠正这个问题?

1 个答案:

答案 0 :(得分:1)

如果在viewDidLoad中实现了CDVViewController(并且有一个),请确保在绑定中公开它,因此C#也会拥有它并考虑调用它,而不是跳到其父母。

这样的事情应该这样做:

ApiDefinition.cs

using System;
using MonoTouch.Foundation;
using MonoTouch.UIKit;

namespace Omnimove.Web.Cordova
{
    [BaseType(typeof(UIWebView))]
    interface CDVCordovaView 
    {
    }

    [BaseType (typeof (UIViewController))]
    interface CDVViewController 
    {
        [Export ("webView")]
        CDVCordovaView WebView { get; set; }

        [Export ("viewDidLoad")]
        void ViewDidLoad ();
    }
}