如何在Objective-c参数的MonoTouch Bindings中定义参数/返回类型,这些参数是“实现协议的类型”,例如“UIView<NIRecyclableView>
”。
例如,检查此头文件。
https://github.com/jverkoey/nimbus/blob/master/src/core/src/NIViewRecycler.h
@interface NIViewRecycler : NSObject
- (UIView<NIRecyclableView> *)dequeueReusableViewWithIdentifier:(NSString *)reuseIdentifier;
- (void)recycleView:(UIView<NIRecyclableView> *)view;
- (void)removeAllViews;
@end
我应该将参数声明为IntPtr吗?如果是这样,我如何将MonoTouch实例转换为IntPtr?
答案 0 :(得分:1)
在同一个头文件中,您有一个NIRecyclableView
类,它继承自UIView
并实现NIRecyclableView
协议,因此您可能希望返回该对象
@interface NIRecyclableView : UIView <NIRecyclableView>
// Designated initializer.
- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier;
@property (nonatomic, readwrite, copy) NSString* reuseIdentifier;
@end
因此该标头的绑定看起来像这样
[BaseType (typeof (NSObject))]
interface NIViewRecycler {
[Export ("dequeueReusableViewWithIdentifier:")]
NIRecyclableView DequeueReusableView (string reuseIdentifier);
[Export ("recycleView:")]
void RecycleView (NIRecyclableView view);
[Export ("removeAllViews")]
void RemoveAllViews ();
}
[Model]
[Protocol]
[BaseType (typeof (NSObject), Name = "NIRecyclableView")]
interface NIRecyclableViewProtocol {
[Export ("reuseIdentifier", ArgumentSemantic.Copy)]
string ReuseIdentifier { get; set; }
[Export ("prepareForReuse")]
void PrepareForReuse ();
}
// Here you would do interface NIRecyclableView : NIRecyclableViewProtocol
// But NIRecyclableView already implements reuseIdentifier
// So you just inline the missing method PrepareForReuse
// and you get the same results
[BaseType (typeof (UIView))]
interface NIRecyclableView {
[Export ("initWithReuseIdentifier:")]
IntPtr Contructor (string reuseIdentifier);
[Export ("reuseIdentifier", ArgumentSemantic.Copy)]
string ReuseIdentifier { get; set; }
[Export ("prepareForReuse")]
void PrepareForReuse ();
}
协议就像嘿,如果你愿意,这个对象也可以响应这个objective-c消息,所以你可以像我们上面那样在接口定义上手动内联它们,或NIRecyclableView : NIRecyclableViewProtocol
在这种情况下我们不要不得不。
希望这有帮助
亚历