如何绑定到Xamarin.iOS中的基本类型和协议

问题描述:

我正尝试构建一个使用Cordova库的xamarin应用程序。我一直在为自己需要的库的组件创建自己的绑定,到目前为止,它一直运行良好。如何绑定到Xamarin.iOS中的基本类型和协议

今天我遇到了一个有趣的问题。我试图覆盖CDVViewContaineravailable here上的webView: shouldStartLoadWithRequest:方法。我看过Xamarin Binding Guide和Xamarin Advanced Binding guide。这两记下的协议类似于接口,并作为高级绑定指南中显示

@interface UITextField : UIControl <UITextInput> { 

} 

将在此基础上转化为

[BaseType (typeof (UIControl))] 
interface UITextField : UITextInput { 
} 

,我翻译

@interface CDVViewController : UIViewController <UIWebViewDelegate, CDVScreenOrientationDelegate>{ 

} 

分成

[BaseType (typeof (UIViewController))] 
interface CDVViewController : UIWebViewDelegate { 

} 

但是,当我试图让我的绑定库,我得到

Cordova.cs(26,39): error CS0527L Type `MonoTouch.UIKit.UIWebViewDelegate' in interface list is not an interface. 

我检查了苹果的技术规格,并this is in fact a Protocol。任何人都可以帮我弄清楚我做错了什么?

这是对工具的限制。只有在包含自己的定义时,才能使用该语法来采用协议。采用在外部定义中定义的协议时不起作用。

+0

这是不幸的,因为当我试图为phonegap做一个本地绑定,并在许多类中,他们继承了一个基类,并实现了几个协议。到目前为止,我所见过的最好方法是将协议中的所有方法添加到我的绑定类定义中。 – 2013-03-28 18:26:08

+0

如果我试图扩展上面的类,它显然会导致分段错误(http://*.com/questions/15693762/monotouch-application-exits-unexpectedly-code-0-code-1-segmatation-fault-11 )。看起来,当你扩展这个类时,调用base方法只是再次调用原始方法,这会调用基本方法...重复直到出现分段错误。 – 2013-04-01 16:11:44

+0

也许我不完全理解答案。你是说这只适用于你是否采用自定义协议,因此在同一个API定义中包含协议的定义?我正在采用UIGestureRecognizerDelegate,并且出现相同的错误,但是我将程序集中的绑定复制到了我的绑定类中,但仍然无法解决错误。 – winnicki 2014-07-10 03:16:37