我正在尝试将 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 似乎根本没有触发。任何人都可以解释为什么会这样,以及如何纠正这个问题?
答案 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 ();
}
}