从我正在使用的绑定API的文档:
overrideClassNames
使用它来使用特定的子类而不是默认的PSPDF * 类。例如添加[PSPDFAnnotationParser类]的条目/ [MyCustomAnnotationParser类]作为键/值对使用自定义 子类。 (MyCustomAnnotationParser必须是。的子类 PSPDFAnnotationParser)如果覆盖类是,则抛出异常 不是重写类的子类。注意:不会被序列化 保存到磁盘时。
@property(nonatomic,strong)NSDictionary * overrideClassNames
这是我尝试但不起作用的。显然不是字符串是必需的,但实际的类型或东西。我如何在MonoTouch中使用它?
var oClassDic = new NSMutableDictionary();
oClassDic.Add(new NSString("[PSPDFAnnotationParser class]"), new NSString("[PSPDFKitAnnotationParser class]"));
oDoc.OverrideClassNames = oClassDic;
我创建的PSPDFKitAnnotationParser如下:
[Register("PSPDFKitAnnotationParser")]
public class PSPDFKitAnnotationParser : PSPDFAnnotationParser
{
public PSPDFKitAnnotationParser () : base()
{
}
public PSPDFKitAnnotationParser (PSPDFDocumentProvider provider) : base(provider)
{
}
public PSPDFKitAnnotationParser (IntPtr handle) : base(handle)
{
}
public PSPDFKitAnnotationParser (NSObjectFlag t) : base(t)
{
}
public PSPDFKitAnnotationParser (NSCoder coder) : base(coder)
{
}
答案 0 :(得分:2)
MonoTouch自己的绑定通常会隐藏class
并将其替换为.NETy System.Type
。
但是MonoTouch.ObjCRuntime.Class
类型存在并且也可以使用。如果本机代码需要class
个实例,那么您应该可以执行以下操作:
var oClassDic = new NSMutableDictionary();
oClassDic.Add(new Class("PSPDFAnnotationParser"), new Class("PSPDFKitAnnotationParser"));
oDoc.OverrideClassNames = oClassDic;
您可能需要稍微调整一下,因为Class
实例不是NSObject
,它在MonoTouch中是NativeObject
,因此您可能需要更深入一级并使用在您的词典中添加值/键时,Handle
属性(IntPtr
)。
答案 1 :(得分:1)
关注@poupou回答这可能有用,我还没有测试过它这就是你要做的事情,It Works(TM)
var oClassDic = new NSMutableDictionary();
var key = new Class("PSPDFAnnotationParser");
var val = new Class("PSPDFKitAnnotationParser");
IntPtr selSetObjectForKey = Selector.GetHandle ("setObject:forKey:");
Messaging.void_objc_msgSend_IntPtr_IntPtr (oClassDic.Handle, selSetObjectForKey, val.Handle, key.Handle);
oDoc.OverrideClassNames = oClassDic;
选择器setObject: forKey:期望两个参数上的ObjC id
类型
“id”它只是一个特殊的类型,可以保存指向你可以使用ObjC构造的任何对象的指针
所以这应该有效:)
希望这有帮助
亚历